показывает строки, если подзапросы объединяют столбцы, если они существуют - PullRequest
2 голосов
/ 07 февраля 2012

Я хочу вернуть строку, только если любой из подзапросов возвращает поле.

SELECT upd8r_user_accts.id, (

SELECT fb_id
FROM upd8r_facebook_accts
WHERE user_id = upd8r_user_accts.id
) as facebook, (

SELECT twitter
FROM upd8r_twitter_accts
WHERE user_id = upd8r_user_accts.id
) as twitter
FROM  `upd8r_user_accts` 

также я возвращаю значения токена id / access для каждого из подзапросов - как я могу вернуть логическое значениеда или нет?

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012
SELECT
  upd8r_user_accts.id,
  upd8r_facebook_accts.fb_id  IS NOT NULL  AS has_fb_id,
  upd8r_twitter_accts.twitter IS NOT NULL  AS has_twitter
FROM
  upd8r_user_accts
LEFT JOIN
  upd8r_twitter_accts
    ON upd8r_twitter_accts.user_id = upd8r_user_accts.id
LEFT JOIN
  upd8r_facebook_accts
    ON upd8r_facebook_accts.user_id = upd8r_user_accts.id
WHERE
     upd8r_facebook_accts.fb_id  IS NOT NULL
  OR upd8r_twitter_accts.twitter IS NOT NULL
1 голос
/ 07 февраля 2012

Попробуйте это так:

SELECT u.id, f.fb_id as facebook, t.twitter as twitter
FROM  upd8r_user_accts u
LEFT JOIN upd8r_facebook_accts f on f.user_id = u.id
LEFT JOIN upd8r_twitter_accts t on t.user_id = u.id

Теперь, если вы хотите, чтобы да или нет в Facebook и Twitter, сделайте это следующим образом:

SELECT u.id,
       case when f.fb_id is null then 'no' else 'yes' end as facebook,
       case when t.twitter is null then 'no' else 'yes' as twitter
FROM  upd8r_user_accts u
LEFT JOIN upd8r_facebook_accts f on f.user_id = u.id
LEFT JOIN upd8r_twitter_accts t on t.user_id = u.id
0 голосов
/ 07 февраля 2012

В качестве альтернативы левому соединению попробуйте внутреннее соединение с объединенным набором:

select u.id, 
       coalesce(max(a.fb_id), 'no') fb_id, 
       coalesce(max(a.twitter), 'no') twitter
from
(select id, 'yes' fb_id, null twitter from upd8r_facebook_accts
 union all
 select id, null fb_id, 'yes' twitter from upd8r_twitter_accts) a
join upd8r_user_accts u on a.id = u.user_id
group by a.id
0 голосов
/ 07 февраля 2012

Вам нужно проверить, есть ли строка в соответствующей таблице:

    SELECT upd8r_user_accts.id
           ,(SELECT fb_id
             FROM upd8r_facebook_accts
             WHERE user_id = upd8r_user_accts.id) as facebook
           ,(SELECT twitter
             FROM upd8r_twitter_accts
             WHERE user_id = upd8r_user_accts.id) as twitter
    FROM  upd8r_user_accts
    WHERE EXISTS (SELECT fb_id
                  FROM upd8r_facebook_accts
                  WHERE user_id = upd8r_user_accts.id) 
          OR
          EXISTS (SELECT twitter
                  FROM upd8r_twitter_accts
                  WHERE user_id = upd8r_user_accts.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...