好的,我觉得这应该是显而易见的,但我没有看到它。我有一个标记系统,通过第三个表(比如说B)有两个表(比如A和C)相关(很多)。
我想在A中选择满足基于C中字段的条件的所有唯一行。也就是说,如果A中的同一行标记有C中符合我标准的多个标记,我不会我想要多行 - 只是A中的一行。
所以我希望A中的所有行都有基于C字段的标签符合我的标准。但是我从不想在A中复制一行,即使它有多个符合条件的标签。
答案 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'