以下SQL命令如何彼此不同?

时间:2015-12-19 10:39:07

标签: sql oracle11g

SQL statment1:

SELECT * FROM table_x WHERE (coloumn1,coloumn2) in (1,2);

SQL statment2:

SELECT * FROM table_x WHERE (coloumn1,coloumn2) in (SELECT 1,2 FROM DUAL);

1 个答案:

答案 0 :(得分:4)

主要区别:第一个查询语法不正确,不起作用。第二部作品。

您的第一个陈述需要额外的括号:

SELECT * FROM table_x WHERE (coloumn1,coloumn2) in ((1,2));
<=>
SELECT * FROM table_x WHERE (coloumn1,coloumn2) in (SELECT 1,2 FROM DUAL);

SqlFiddleDemo

然后你的两个查询都是等价的。

<小时/> 但如果预先知道值,我更喜欢第一种查询语法:

WHERE (coloumn1,coloumn2) in ((1,2), (3,4)) 
vs 
WHERE (coloumn1,coloumn2) in (SELECT 1,2 FROM DUAL UNION ALL SELECT 3,4 FROM dual)