我有两个非常简单的表:t1
和t2
以下几行:
表t1
:
id, name
1 PBN
表t2
:
id, name
100 FIBERHOME
查询1:
SELECT name FROM t1 UNION SELECT name FROM t2 WHERE id IN (1)
结果是:PBN
查询2:
SELECT name FROM t1 UNION SELECT name FROM t2 WHERE id IN (100)
结果是:PBN,FIBERHOME
但是预期的结果是:FIBERHOME ..!是什么原因?
如果您只想要一个,请扩展@Knep的答案WHERE id IN ()
:
SELECT name FROM (
SELECT id, name FROM t1
UNION
SELECT id, name FROM t2
) unioned
WHERE id IN (1,100)
速度不是明智的选择,因此最好进行测试。
还要注意id
需要在外部使用的子查询中WHERE
。
我以为WHERE子句是全局的– @szpal
要回答有关为什么UNION中的所有查询都不使用WHERE的问题,请考虑两个不共享列的查询。
他们自己:
SELECT id, name FROM x WHERE colA = 123
和:
SELECT id, name FROM y WHERE colB = 456
然后与(不正确的)单个WHERE子句一起:
SELECT id, name FROM x
UNION
SELECT id, name FROM y
WHERE colB = 456 -- But table x doesn't have a colB!
鉴于(正确地)WHERE子句与每个查询一起位于:
SELECT id, name FROM x
WHERE colA = 123 -- I have a colA, still don't have a colB
UNION
SELECT id, name FROM y
WHERE colB = 456 -- I have a colB, still don't have a colA
每个人都是赢家!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句