0

假设我有两个相关的表parents并且children具有一对多的关系(parent一对多children)。通常,当我需要一起处理这些表上的信息时,我会执行如下查询(通常会WHERE添加一个子句):

SELECT * FROM parents INNER JOIN children ON (parents.id = children.parent_id);

我怎样才能选择所有parents至少有一个child而不浪费时间加入children他们的所有parents

我正在考虑使用某种,OUTER JOIN但我不确定该怎么做。

(请注意,我一般是在问这个问题,所以除非没有通用解决方案,否则不要给我与特定 RDBMS 实现相关的答案。)

4

3 回答 3

3

正如我之前在评论中所说:

解决方案LEFT JOINGROUP BY

SELECT p.parents.id FROM parents p
LEFT JOIN children c ON (p.parents.id = c.children.parent_id)
WHERE children.parent_id IS NOT NULL
GROUP BY p.parents_id

与以下相同DISTINCT

SELECT DISTINCT p.parents.id FROM parents p
LEFT JOIN children c ON (p.parents.id = c.children.parent_id)
WHERE children.parent_id IS NOT NULL

它应该适用于大多数 SQL 方言,尽管as在分配table aliases.

以上未经测试。希望我没有错别字。

于 2013-09-30T14:55:08.417 回答
2

I think that the simplest solution that avoids a JOIN would be:

SELECT * FROM parents WHERE id IN (SELECT parent_id FROM children);
于 2013-09-30T05:28:09.767 回答
0

尝试这个

select parent_id,(select count(1) from children where parent_id = x.parent_id)
from parent x where
(select count(1) from children where parent_id = x.parent_id) > 0
于 2013-09-30T01:52:13.983 回答