Пожалуйста, скажите мне запрос MySQL - PullRequest
1 голос
/ 01 января 2011

у меня есть 5 таблиц, user , t1, t2, t3, t4 user имеет поле с именем id. t1 до t4 все имеют соответствующее поле с именем user_id и поле с именем verification.

Теперь мне нужно отчетливо (или однозначно) выбрать user из user table, чей id существует хотя бы раз в хотя бы одной таблице из t1 до t4, и где verification поле true.

Ответы [ 4 ]

3 голосов
/ 01 января 2011

Из вашего подробного описания выглядит, что вы близки к решению. Необходимо использовать EXISTS и OR (при условии, что TRUE заменено на 1):

SELECT id FROM User u WHERE
    EXISTS(SELECT 1 FROM t1 WHERE u.id = t1.user_id AND t1.verification =1) 
    OR EXISTS(SELECT 1 FROM t2 WHERE u.id = t2.user_id AND t2.verification =1 )
    OR EXISTS(SELECT 1 FROM t3 WHERE u.id = t3.user_id AND t3.verification =1 ) 
    OR EXISTS(SELECT 1 FROM t4 WHERE u.id = t4.user_id AND t4.verification =1 ) 
1 голос
/ 01 января 2011

Утомительно, а не сложно:

SELECT id FROM User JOIN t1 ON user.id = t1.user_id WHERE verification = TRUE
UNION
SELECT id FROM User JOIN t2 ON user.id = t2.user_id WHERE verification = TRUE
UNION
SELECT id FROM User JOIN t3 ON user.id = t3.user_id WHERE verification = TRUE
UNION
SELECT id FROM User JOIN t4 ON user.id = t4.user_id WHERE verification = TRUE
0 голосов
/ 01 января 2011

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

select
       distinct u.user
from
       user u
where
      exists (
      (select user_id from t1 where t1.user_id  = u.id and t1.verification = true)
   OR (select user_id from t2 where t2.user_id  = u.id and t2.verification = true)
   OR (select user_id from t3 where t3.user_id  = u.id and t3.verification = true)
   OR (select user_id from t4 where t4.user_id  = u.id and t4.verification = true)
   )
0 голосов
/ 01 января 2011

Я бы использовал UNION set в таблицах t1 - t4, чтобы получить user_id в них, и использовал бы этот результат для предложения IN() на таблице user, например:

SELECT * FROM user
WHERE id IN (SELECT user_id FROM t1 WHERE verification = TRUE
             UNION
             SELECT user_id FROM t2 WHERE verification = TRUE
             UNION
             SELECT user_id FROM t3 WHERE verification = TRUE
             UNION
             SELECT user_id FROM t4 WHERE verification = TRUE)'

По характеру работы IN() вы также получаете отличные user результаты таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...