Я должен искать на двух таблицах.
Мой второй стол:
+---------+---------------+-------+
| user_id | is_first_time | score |
+---------+---------------+-------+
| 44 | 1 | 20 |
+---------+---------------+-------+
| 44 | 0 | 20 |
+---------+---------------+-------+
Моя первая таблица просто содержит информацию о пользователе.
Если я использую следующую команду MySQL, я получу результат:
SELECT * , users_score.user_id users_score_user_id
FROM users JOIN users_score
ON users_score.user_id = users.id
WHERE (users_score.score='20' AND users_score.is_first_time='1')
Если я использую следующую команду MySQL, я также получу результат (я просто изменяю значение «is_first_time» на «0»):
SELECT * , users_score.user_id users_score_user_id
FROM users JOIN users_score
ON users_score.user_id = users.id
WHERE (users_score.score='20' AND users_score.is_first_time='0')
Но если я объединю обе команды с AND, я не получу никаких результатов:
SELECT * , users_score.user_id users_score_user_id
FROM users JOIN users_score
ON users_score.user_id = users.id
WHERE (users_score.score='20' AND users_score.is_first_time='1')
AND (users_score.score='20' AND users_score.is_first_time='0')
Как я могу объединить или пересечь обе команды?
Спасибо за любую помощь.
Если вы хотите, чтобы пользователи выполняли оба условия, то один метод использует in
или же exists
:
SELECT u.*
FROM users u
WHERE u.id IN (SELECT us.user_id FROM users_score us WHERE us.score = '20' AND us.is_first_time = '0'
) AND
u.id IN (SELECT us.user_id FROM users_score us WHERE us.score = '20' AND us.is_first_time = '1'
);
Вопрос с AND
является то, что одна строка не может быть и 0 и 1.
Если вы просто хотите идентификатор пользователя, я бы порекомендовал group by
а также having
:
select us.user_id
from users_score us
where score = 20 and us.is_first_time in (0, 1)
group by us.user_id
having count(distinct us.is_first_time) = 2;
Обратите внимание, что я удалил одинарные кавычки. Если столбцы являются числами, не используйте одинарные кавычки для сравнения. (Конечно, если они являются строками, используйте одинарные кавычки.)
Вам нужно использовать OR
состояние здесь
WHERE (users_score.score='20' AND users_score.is_first_time='1')
OR (users_score.score='20' AND users_score.is_first_time='0')
Но это может быть написано лучше, используя IN
состояние
SELECT *,
users_score.user_id users_score_user_id
FROM users
JOIN users_score
ON users_score.user_id = users.id
WHERE users_score.score = '20'
AND users_score.is_first_time IN ( '1', '0' )