gpt4 book ai didi

MySQL UNION SELECT 和 IN 子句

转载 作者:行者123 更新时间:2023-12-01 10:26:46 24 4
gpt4 key购买 nike

我有两个非常简单的表:t1t2,其中包含以下行:

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 中使用。

I thought that the WHERE clause is global – @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

人人都是赢家!

关于MySQL UNION SELECT 和 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com