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

我有很多这样的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语法.

Here我读过,使用MySql,IN语句没有优化,而且速度很慢,所以我想把它切换成JOIN.

我试过了:

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

但是这没有考虑DISTINCT关键字.

问题:如何使用JOIN方法摆脱重复的行?

解决方法:

要使用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不会产生最佳性能.

上一篇:异常


下一篇:db2语句块示例