SQL子查询与UNION ALL查询结合

谢尔格达

我有两个表:具有ID和Cost列的商品,以及具有goodid,languageid,title列的good_texts。因此good_texts包含翻译。

我有一个查询,如果可用,则选择当前语言的标题,如果不适用于一种商品,则选择默认标题:

    SELECT
    *
FROM
    good_texts
WHERE
    languageid = 2
UNION ALL
    SELECT
        *
    FROM
        good_texts
    WHERE
        languageid = 1 AND goodid = 92
    AND goodid NOT IN (
        SELECT
            goodid
        FROM
            good_texts
        WHERE
            languageid = 2 and goodid = 92
    )

这可以正常工作,并且只返回一行。现在,我尝试编写查询以从良好表中获取所有数据以及从good_texts表中获得标题。我正在尝试使用以下查询执行此操作:

    SELECT
    s1.id,
    s1.cost,
    (SELECT
    s2.title
FROM
    good_texts s2
WHERE
    languageid = 2
UNION ALL
    SELECT
        s3.title
    FROM
        good_texts s3
    WHERE
        languageid = 1 AND s3.goodid = s1.id
    AND s3.goodid NOT IN (
        SELECT
            s4.goodid
        FROM
            good_texts s4
        WHERE
            languageid = 2 AND s4.goodid = s1.id
    ))
FROM
    goods s1

但这不会出错

子查询返回的多于一行用作表达式

我不明白为什么我的子查询甚至返回多行,因此如果单独运行它会返回一行。我的目标如何实现?

谢尔格达

我设法使用@Gordon Linoff代码解决了这个问题,最终结果是:

SELECT gt.*, goods.*
FROM good_texts gt
JOIN goods ON goods.id = gt.goodid
WHERE gt.languageid = 2
UNION ALL
SELECT gt.*, goods.*
FROM good_texts gt
JOIN goods ON goods.id = gt.goodid
WHERE gt.languageid = 1 AND
      NOT EXISTS (SELECT 1
                  FROM good_texts gt2
                  WHERE gt2.goodid = gt.goodid AND gt2.languageid = 2
                 )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章