一次获得多对多关系中的相关行

时间:2012-07-15 21:44:10

标签: sql

好的,我觉得这应该是显而易见的,但我没有看到它。我有一个标记系统,通过第三个表(比如说B)有两个表(比如A和C)相关(很多)。

我想在A中选择满足基于C中字段的条件的所有唯一行。也就是说,如果A中的同一行标记有C中符合我标准的多个标记,我不会我想要多行 - 只是A中的一行。

所以我希望A中的所有行都有基于C字段的标签符合我的标准。但是我从不想在A中复制一行,即使它有多个符合条件的标签。

2 个答案:

答案 0 :(得分:2)

简单的解决方案是添加DISTINCT关键字。换句话说改变这个:

SELECT A.foo FROM ...

到此:

SELECT DISTINCT A.foo FROM ...

DISTINCT关键字可确保您不会在结果中获得重复项。


另一种解决方案是重写您的查询以使用EXISTS

SELECT *
FROM A
WHERE EXISTS
(
    SELECT *
    FROM B
    JOIN C
    ON ...
    WHERE ...
)

答案 1 :(得分:1)

SELECT DISTINCT A.*
FROM A
    INNER JOIN B
        ON A.id = B.id
    INNER JOIN C
        ON C.id = B.id
WHERE C.SomeField = 'SomeValue'