在标准SQL中,是否可以以某种方式仅加入不同的匹配?

nat*_*evw 1 sql

我有一个"子"对象表,每个对象都有一个外键到另一个表中的"父".

我想从每个有"孩子"的"父母"得到一个字段 - 但每个父母只有一次.如果该字段是唯一的,我可以通过以下方式完成:

SELECT DISTINCT parent.slug 
FROM parent 
INNER JOIN child 
   ON parent.id = parent_id;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要的领域不是唯一的呢?如何加入不同的ID,而不是在加入后进行过滤?就像是:

-- this does not actually work
SELECT parent.first_name 
FROM parent 
INNER JOIN child 
   ON DISTINCT parent.id = parent_id;
Run Code Online (Sandbox Code Playgroud)

我希望每个父母有一个或多个孩子的单行.如果"John Smith"有五个孩子并且"John Doe"有九个孩子,我应该得到两个"John"行(每个父亲一个).

我想我可以这样做:

SELECT DISTINCT parent.id, parent.first_name 
FROM parent 
INNER JOIN child 
   ON parent.id = parent_id;
Run Code Online (Sandbox Code Playgroud)

...但这是最有效的方式,即使每个"父"行在实践中可能有数千个"子"行?

mel*_*ene 5

为什么不呢?

SELECT parent.first_name
FROM parent
WHERE EXISTS (
    SELECT *
    FROM child
    WHERE child.parent_id = parent.id
);
Run Code Online (Sandbox Code Playgroud)