我正在处理这样一个查询:

SELECT * FROM requests where (id,langid) IN (SELECT nid,langid FROM node)

我的问题是
这在mysql和postgresql中有效吗?
这是标准SQL支持的吗?
我知道这不是最好的解决方案,加入是可行的,但我对此不感兴趣。

最佳答案

将存在标准和可移植的SQL。在语义上是相同的

SELECT *
FROM requests R
WHERE
    EXISTS (SELECT *
           FROM node n
           WHERE r.id = n.nid AND r.langid = n.langid
           )

中的多列至少不能移植到SQL Server或Sybase。
其他说明:
一个联接可能需要一个distinct,它与in或exists不同。
最后一个选项是Intersect,这是一种不太常见的支持,工作方式类似于in/exists。
iirc一些史前MySQL版本(3.x?)不支持exists的相关性

09-25 16:20