我有两个表:带有列ID和成本的商品以及带有goodid,languageid,title列的good_texts。所以good_texts包含良好的翻译。SQL子查询与UNION ALL查询结合使用
我有查询当前语言选择标题是否可用,并选择默认的标题,如果它不提供一个良好:
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
但是,这并不与错误工作
一个子查询返回多行被用作表达
我不明白为什么我的子查询返回多个行,即使它返回一行,如果它分开运行。 我的目标如何实现?
,你能否告诉我们表格结构,样本数据和预期结果? – Philipp
你正在使用什么数据库? MySQL和Postgres完全不同。 –
我使用Postgresql – user2975535