我有两个表:具有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] 删除。
我来说两句