在某些SQL方言中,您可以声明(诸如此类):
SELECT * FROM SomeTable WHERE (val1,val2) IN
(SELECT val1,val2 FROM SomeOtherTable)
但是我不知道如何在我正在使用的TSQL(sql server 2k)中做到这一点。
我知道(并且现在使用)变通方法,例如使用联接或串联值,
但是TSQL中有一些我可以忽略的语法吗?
更新:这是有效的SQL-99语法,这就是为什么我认为联接是一种解决方法,即使它会更有效。我的问题也许更好:
TSQL中是否有此语法的实现?
UPDATE2:我刚刚在Mysql中测试了这种语法,并且在这里可以正常工作。
最佳答案
SELECT *
FROM SomeTable st
WHERE EXISTS
(
SELECT 1
FROM SomeOtherTable sot
WHERE sot.val1 = st.val1
AND sot.val2 = st.val2
)
这实际上是使用任何
IN
方法优化SEMI JOIN
构造的内容。至于你的问题
T-SQL
中是否有此语法的实现?答案是不
正如documentation所说:
…
subquery
的结果集为一列。此列的数据类型必须与test_expression
相同。关于sql-server - 在SQL中是否有此查询语法的实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/955652/