0

わかりました、これは明らかであるべきだと思いますが、私はそれを見ていません。3番目のテーブル(Bなど)を介して(多対多)関連する2つのテーブル(AとCなど)のタグ付けシステムがあります。

C のフィールドに基づく基準を満たす A のすべての一意の行を選択したいと考えています。つまり、A の同じ行が私の基準を満たす C の複数のタグでタグ付けされている場合、複数の前の行 - A から 1 行だけ。

したがって、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 に答える