为什么这种语法在MySQL中有效(匹配列对的列对)?

时间:2009-08-24 20:44:00

标签: mysql syntax

刚才我需要做类似以下查询的事情,并且惊讶于它实际上是有意图的。但是我找不到任何关于它的文件,所以我有点担心这个未知的副作用。这是我写的:

select * from Table1 where (col1, col2) in (select col3, col4 from Table2)

这似乎是将一对列与列对列表相匹配。这是它应该如何工作,还是我可以期待一些令人讨厌的惊喜?

1 个答案:

答案 0 :(得分:7)

似乎MySQL手册中有一个关于该语法的页面:12.2.9.5. Row Subqueries

其中一个例子就是这个(引用):

SELECT column1,column2,column3
       FROM t1
       WHERE (column1,column2,column3) IN
             (SELECT column1,column2,column3 FROM t2);

这与您的查询非常相似。

所以我认为这是官方支持的。


同一页说(引用):

  

行构造函数在其他方面是合法的   背景也是如此。例如,   以下两个陈述是   在语义上等价(虽然   第一个不能优化,直到   MySQL 5.0.26):

SELECT * FROM t1 WHERE (column1,column2) = (1,1);
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;

所以,即使您提出的语法有效,第二个可能会更好,如果您可以使用它,至少 - 并且更容易阅读/理解;-)
你会从页面12.2.9. Subquery Syntax

中找到很多关于子查询的东西


(是的,不容易找到^^)