2

データベースで 3 つのテーブルを使用しており、3 つのテーブルすべてを結合する必要があるクエリを使用しています。テーブルは次のようになります。

表 A:

     id   |   name   |   status   
---------------------------------
     5    |   john    |     1
     7    |   mike    |     1
     8    |   jane    |     0

表 B:

 send-id  |  receive-id  |  notification
-------------------------------------------
    12    |      5       |       1
    5     |      23      |       1
    8     |      14      |       1
    19    |      7       |       2
    14    |      5       |       1

表 C:

  registered-id  |   status-reg
 ----------------------------------   
       5         |      7
       7         |      7
       8         |      7
       9         |      3

テーブル A のステータスが「1」で、テーブル C のステータスが「7」で、これらのユーザーがテーブル B の列「receive-id」に値「2」でリストされていないユーザーをリストする必要があります。 「お知らせ」欄に。

この例の結果は次のようになります。

    id   |   name    |   status   |  notification
 --------------------------------------------------
     5   |   john    |     1      | 

ID 番号が 7 と 8 のユーザーは、リストから除外されます。ID# 7 のユーザーはテーブル B のフィールド receive-id にあり、テーブル通知の値は 2 であり、ID 8 のユーザーはテーブル A のステータスが 0 であるためです。

1回のクエリでそれを行うにはどうすればよいですか?

助けてくれてありがとう。

4

2 に答える 2

2
Select ID, Name, Status, Notification
FROM TableA A
LEFT JOIN TableB B on B.receive-id = a.ID
 and b.notification <> 2
INNER JOIN tableC C on A.ID = C.Registered-id
WHERE a.status=1
and c.status-reg=7

ステータスが1と7である限り、テーブルBにレコードがなくても、すべてのユーザーが必要だと思います。したがって、左結合が必要であり、結合に制限を課す必要があると思います(必要な場合を除く) where句でnullを処理するため)

于 2012-04-22T16:59:30.450 に答える
1

試してみましょう (未テスト、エラーが含まれている可能性があります):

SELECT a.id, a.name, a.status, b.notification
FROM a
JOIN c ON (a.id = c.registered-id)
JOIN b ON (a.id = b.receive-id)
WHERE a.status = 1
AND c.status-reg = 7
AND b.notification <> 2

これが正しい軌道に乗ることを願っています。

于 2012-04-22T16:56:58.623 に答える