我有一个名为PARENTTABLE(id,…)的项目表
我还有一个名为CHILDTABLE(id,parent_id,…)的项目表带有对PARENTTABLE中项目的引用列。
如何编写一个只从PARENTTABLE中获取项目的查询,而这些项目在CHILDTABLE中肯定有引用。
目前我正在使用:
SELECT * FROM PARENTTABLE WHERE id IN (SELECT parent_id FROM CHILDTABLE)
这是一种可接受的方法吗?还是有一种更优化的方法,因为随着时间的推移,最终会有许多条目进入CHILDTABLE,使IN语句变得很长。
SELECT DISTINCT PARENTTABLE.*
FROM PARENTTABLE
INNER JOIN CHILDTABLE ON CHILDTABLE.parent = PARENTTABLE.id
试试这样的东西:
SELECT * from parent where id in (Select distinct parentid from child)
带有EXISTS
的版本
SELECT *
FROM parenttable p
WHERE EXISTS
(
SELECT *
FROM childtable
WHERE parent_id = p.id
)
这是SQLFiddle演示