我有很多这样的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不会产生最佳性能.