刚才我需要做类似以下查询的事情,并且惊讶于它实际上是有意图的.但是我找不到任何关于它的文件,所以我有点担心这个未知的副作用.这是我写的:
select * from Table1 where (col1, col2) in (select col3, col4 from Table2)
Run Code Online (Sandbox Code Playgroud)
这似乎是将一对列与列对列表进行匹配.这是它应该如何工作,还是我可以期待一些令人讨厌的惊喜?
MySQL手册中似乎有一个关于该语法的页面:12.2.9.5.行子查询
其中一个例子就是这个(引用):
SELECT column1,column2,column3
FROM t1
WHERE (column1,column2,column3) IN
(SELECT column1,column2,column3 FROM t2);
Run Code Online (Sandbox Code Playgroud)
这与您的查询非常相似.
所以我认为它是官方支持的.
同一页说(引用):
行构造函数在其他上下文中也是合法的.例如,以下两个语句在语义上是等效的(尽管第一个语句在MySQL 5.0.26之前无法优化):
SELECT * FROM t1 WHERE (column1,column2) = (1,1);
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;
Run Code Online (Sandbox Code Playgroud)
所以,即使你提出的语法是有效的,第二个可能会更好,如果你可以使用它,至少-更容易阅读/理解;-)
,你会发现关于从子查询很多其他的东西第12.2.9页.子查询语法
(是的,不容易找到^^)
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |