小编典典

SQL查询:如何将IN()转换为JOIN?

sql

我有很多这样的SQL查询:

SELECT o.Id, o.attrib1, o.attrib2 
  FROM table1 o 
WHERE o.Id IN (
                SELECT DISTINCT Id 
                  FROM table1
                     , table2
                     , table3 
                 WHERE ...
               )

这些查询必须在不同的数据库引擎(MySql,Oracle,DB2,MS-Sql,Hypersonic)上运行,所以我只能使用通用的SQL语法。

在这里,我读到,使用MySql时,该IN语句未经过优化,而且速度确实很慢,因此我想将其切换为JOIN

我试过了:

SELECT o.Id, o.attrib1, o.attrib2 
  FROM table1 o, table2, table3 
  WHERE ...

但这没有考虑到DISTINCT关键字。

问题:如何使用该JOIN方法消除重复的行?


阅读 338

收藏
2021-04-28

共1个答案

小编典典

要使用JOIN编写此代码,可以使用内部选择并与之连接:

SELECT o.Id, o.attrib1, o.attrib2 FROM table1 o
JOIN (
  SELECT DISTINCT Id FROM table1, table2, table3 WHERE ...
) T1
ON o.id = T1.Id

我不确定这会更快,但是也许…您可以自己尝试。

通常,仅将自己限制为可在多个数据库上运行的SQL不会导致最佳性能。

2021-04-28