我正在处理这样一个查询:
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的相关性