在某些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/

10-11 03:00
查看更多