わかりました、これは明らかであるべきだと思いますが、私はそれを見ていません。3番目のテーブル(Bなど)を介して(多対多)関連する2つのテーブル(AとCなど)のタグ付けシステムがあります。
C のフィールドに基づく基準を満たす A のすべての一意の行を選択したいと考えています。つまり、A の同じ行が私の基準を満たす C の複数のタグでタグ付けされている場合、複数の前の行 - A から 1 行だけ。
したがって、C のフィールドに基づいて、私の基準を満たすタグを持つ A のすべての行が必要です。
わかりました、これは明らかであるべきだと思いますが、私はそれを見ていません。3番目のテーブル(Bなど)を介して(多対多)関連する2つのテーブル(AとCなど)のタグ付けシステムがあります。
C のフィールドに基づく基準を満たす A のすべての一意の行を選択したいと考えています。つまり、A の同じ行が私の基準を満たす C の複数のタグでタグ付けされている場合、複数の前の行 - A から 1 行だけ。
したがって、C のフィールドに基づいて、私の基準を満たすタグを持つ A のすべての行が必要です。
DISTINCT簡単な解決策は、キーワードを追加することです。言い換えれば、これを変更します。
SELECT A.foo FROM ...
これに:
SELECT DISTINCT A.foo FROM ...
キーワードはDISTINCT、結果が重複しないようにします。
別の解決策は、以下を使用するようにクエリを書き直すことEXISTSです。
SELECT *
FROM A
WHERE EXISTS
(
SELECT *
FROM B
JOIN C
ON ...
WHERE ...
)
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'