1

次のようなテーブルがあります。

ユーザー ID | want_user_id | 州

stateそして、相互の行を選択し、値が「はい」または「多分」の列を持つ行を選択したいと思います。

サンプルデータ:

行 1:1 | 2 | "yes"
行 2:2 | 1 | "maybe"
行 3:3 | 2 | "yes"

この場合、行 1 と 2 を選択し、wants_user_id(2 番目の列) テーブルからユーザー データを結合したいのですがusers、SQL コマンドがわかりません。

ご協力ありがとうございました。

4

1 に答える 1

0

自己結合を使用して一致する行を取得します(ここでの「相互行」とは、お互いを必要とするユーザーを意味すると想定しています)。

SELECT *
FROM myTable a
INNER JOIN myTable b ON a.user_id = b.wants_user_id
    AND b.user_id = a.wants_user_id
INNER JOIN users ua ON a.user_id = ua.id
INNER JOIN users ub ON b.user_id = ub.id
WHERE a.state IN ('yes', 'maybe')
AND b.state IN ('yes', 'maybe')

この場合、1つは1 <-> 2用、もう1つは2<->1用の2つの「重複」行を取得します。これを排除するためAND b.user_id > a.user_idに、結合条件にを追加できます。これにより、各ペアの1つの行のみが選択されます。

于 2012-11-22T15:49:41.033 に答える