刚才我需要做类似以下查询的事情,并且惊讶于它实际上是有意图的。但是我找不到任何关于它的文件,所以我有点担心这个未知的副作用。这是我写的:
select * from Table1 where (col1, col2) in (select col3, col4 from Table2)
这似乎是将一对列与列对列表相匹配。这是它应该如何工作,还是我可以期待一些令人讨厌的惊喜?
答案 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
(是的,不容易找到^^)