我有很多这样的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。
IN
JOIN
我试过了:
SELECT o.Id, o.attrib1, o.attrib2 FROM table1 o, table2, table3 WHERE ...
但这没有考虑到DISTINCT关键字。
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不会导致最佳性能。