0

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

我想根据 C 中的字段选择 A 中满足条件的所有唯一行。也就是说,如果 A 中的同一行被 C 中符合我条件的多个标签标记,我不想要多个后排 - 只是 A 中的单行。

因此,我希望 A 中的所有行都具有符合我基于 C 中的字段的条件的标签。但我从不希望 A 中的行重复,即使它有多个符合条件的标签。

4

2 回答 2

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 ...
)
于 2012-07-15T21:47:02.303 回答
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'
于 2012-07-15T21:48:13.793 回答