2012-03-20 3 views
0

사용자가입자입니다. 구독자와 사용자의 관계는 many-to-many입니다. SQL. 두 테이블 간의 복잡한 JOIN

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

table users http://s019.radikal.ru/i621/1203/5c/bbfa4d42e678.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 액세스입니까? 그러한 경우 태그를 지정하는 것이 도움이 될 수 있습니다. –

답변

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 join에 의해 null을 할 것입니다.

+0

감사하지만 여기 내가 필요한 쿼리가 있습니다 : s.user_id가 NULL 인 경우 SELECT u. *, 경우 '거짓'ELSE 'true'END AS isSubscriber FROM users u LEFT JOIN 가입자는 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