使用 LEFT JOIN 或 NOT EXISTS 格式之间是否有最佳实践?
使用一个比另一个有什么好处?
如果没有,应该首选哪个?
SELECT *
FROM tableA A
LEFT JOIN tableB B
ON A.idx = B.idx
WHERE B.idx IS NULL
Run Code Online (Sandbox Code Playgroud)
SELECT *
FROM tableA A
WHERE NOT EXISTS
(SELECT idx FROM tableB B WHERE B.idx = A.idx)
Run Code Online (Sandbox Code Playgroud)
我在 Access 中对 SQL Server 数据库使用查询。
我有一个非常古老的 Access 应用程序,它使用 SQL Pass-Through 查询。此应用程序经过多次服务器升级,我们最近升级到 SQL 2012。
我现在收到一个语法错误。代码的最后两行就是问题所在。我相信这是某种 JOIN,但我从未见过这种语法。删除“*”允许查询运行,但会遗漏数据。是否可以轻松替换此语法,或者我是否需要使用 JOIN 短语重新设计这些查询?
SELECT survey.hole,survey_date,pit,cu,rec,zn, mn,north,east,elevation,
rtrim(min_type) min_type,rtrim(rock_type) rock_type,
rtrim(alt_type) alt_type, rtrim(min_style) min_style
FROM survey,assay,geology
WHERE mined_out IS NULL
AND pit = (SELECT fmpit FROM tyrctl WHERE source = 'export by date')
AND (survey_date >= (SELECT fmdate FROM tyrctl WHERE source = 'export by date')
AND survey_date <= (SELECT todate FROM tyrctl WHERE source = 'export by date'))
AND survey.hole *= assay.hole
AND survey.hole *= geology.hole
Run Code Online (Sandbox Code Playgroud)