-1

我有一个名为 PARENTTABLE (id,...) 的项目表

我还有一个名为 CHILDTABLE (id,parent_id,...) 的项目表,其中包含对 PARENTTABLE 中项目的引用列。

如何编写只从 PARENTTABLE 获取项目的查询,这些项目肯定在 CHILDTABLE 中有引用的项目。

目前我正在使用:

SELECT * FROM PARENTTABLE WHERE id IN (SELECT parent_id FROM CHILDTABLE)

这是一种可接受的方法,还是有一种更优化的方法,因为随着时间的推移,CHILDTABLE 中会出现许多条目,从而使 IN 语句非常长。

4

3 回答 3

5
SELECT DISTINCT PARENTTABLE.* 
FROM PARENTTABLE
INNER JOIN CHILDTABLE ON CHILDTABLE.parent = PARENTTABLE.id
于 2013-08-29T20:04:33.127 回答
2

尝试这样的事情:

SELECT * from parent where id in (Select distinct parentid from child)
于 2013-08-29T20:07:54.870 回答
1

一个版本EXISTS

SELECT * 
  FROM parenttable p
 WHERE EXISTS
(
  SELECT *
    FROM childtable
   WHERE parent_id = p.id
)

这是SQLFiddle演示

于 2013-08-29T20:06:02.040 回答