szp*_*pal 3 mysql union select
我有两个非常简单的表:t1并t2包含以下行:
桌子t1:
id, name
1 PBN
Run Code Online (Sandbox Code Playgroud)
桌子t2:
id, name
100 FIBERHOME
Run Code Online (Sandbox Code Playgroud)
查询1:
SELECT name FROM t1 UNION SELECT name FROM t2 WHERE id IN (1)
Run Code Online (Sandbox Code Playgroud)
结果是:PBN
查询2:
SELECT name FROM t1 UNION SELECT name FROM t2 WHERE id IN (100)
Run Code Online (Sandbox Code Playgroud)
结果是:PBN、FIBERHOME
但预期的结果是:FIBERHOME..!是什么原因?
如果您只想要一个,请扩展@Knep的答案WHERE id IN ():
SELECT name FROM (\n SELECT id, name FROM t1\n UNION\n SELECT id, name FROM t2\n) unioned\nWHERE id IN (1,100)\nRun Code Online (Sandbox Code Playgroud)\n\n速度可能不太快,所以最好进行测试。
\n\n另请注意,id需要在子查询中才能在外部使用WHERE。
\n\n\n我认为 WHERE 子句是全局 \xe2\x80\x93 @szpal
\n
要回答为什么 WHERE 不用于 UNION 中的所有查询的问题,请考虑两个不共享列的查询。
\n\n他们自己:
\n\nSELECT id, name FROM x WHERE colA = 123\nRun Code Online (Sandbox Code Playgroud)\n\n和:
\n\nSELECT id, name FROM y WHERE colB = 456\nRun Code Online (Sandbox Code Playgroud)\n\n然后与(错误的)单个 WHERE 子句一起:
\n\nSELECT id, name FROM x\nUNION\nSELECT id, name FROM y\nWHERE colB = 456 -- But table x doesn't have a colB!\nRun Code Online (Sandbox Code Playgroud)\n\n而如果(正确地)WHERE 子句位于每个查询中:
\n\nSELECT id, name FROM x\nWHERE colA = 123 -- I have a colA, still don't have a colB\nUNION\nSELECT id, name FROM y\nWHERE colB = 456 -- I have a colB, still don't have a colA\nRun Code Online (Sandbox Code Playgroud)\n\n每个人都是赢家!
\n| 归档时间: |
|
| 查看次数: |
3159 次 |
| 最近记录: |