2012-03-20 5 views
0

私は2つのテーブル:ユーザーサブスクライバーを持っています。ユーザと加入者との関係は、多対多です。SQL。 2つのテーブル間の複雑なJOIN

table users http://s019.radikal.ru/i621/1203/5c/bbfa4d42e678.jpg

table subscribers http://s018.radikal.ru/i522/1203/7b/e7e61e6ba26d.jpg

私はすべてのユーザーを取得する方法を知っている:

SELECT * FROM users 

をそして私はまた、例えば、ID = 1(彼のidで指定したユーザに加入者を取得する方法を知っています):

SELECT * FROM users LEFT JOIN subscribers ON id = user_id WHERE user_id = 1 

しかし、私はこれらの結果が必要ではありません別々ですが一緒に。

つまり、すべてのユーザーを取得するためのクエリを作成します。 これらのプロパティに加えて、クエリの結果にはプロパティが含まれている必要があります。このプロパティは、各ユーザーがサブスクライバであるかどうかを示します。このような 何か:

table subscribers http://s019.radikal.ru/i622/1203/02/56eaf26cc442.jpg

そしてもちろん、私はサブクエリの使用を避けるようにしたいと思います。 JOINだけを使うのはすばらしいことです。このような場合は可能です。

ありがとうございます!

+0

どのようにして、真/偽の値に加入テーブルマップ? –

+0

このMS Accessはありますか?そのような場合には、タグ付けすると参考になるかもしれません。 –

答えて

2

あなたが行うことができます。ユーザーはsubscribersテーブルにないときs.user_id以来

SELECT u.*, 
     CASE WHEN s.user_id IS NULL THEN 'false' ELSE 'true' END as IsSubscriber 
FROM users u 
    LEFT JOIN subscribers s ON u.id = s.user_id 

は... left joinnullに行われます。

+0

ありがとうございますが、私は必要なクエリです:SELECT u。*、ケースs.user_idがNULLの場合 '偽' ELSE 'true' END AS isSubscriber FROM users u LEFT JOINサブスクライバs ON id = subscriber_idとs。 user_id = 1 – Michael

0

あなたが望む結果が得られるようにクエリを更新しました。

SELECT u.id, u.firstName, u.lastname, WHEN s.user_id IS NULL 'false' else 'true' END as IsSubscriber. 
FROM users u 
LEFT JOIN subscribers s 
    ON u.id = s.user_id 
WHERE user_id = 1 
0
SELECT users.id, users.firstname, users.lastname, COUNT(subscribers.user_id) != 0 AS isSubscriber 
    FROM users 
    LEFT JOIN subscribers ON users.id = subscribers.user_id 
    GROUP BY users.id, users.firstname, users.lastname 
関連する問題