#mysql #sql
#mysql #sql
Вопрос:
У меня есть две таблицы users и items в базе данных MySQL
Users
pk username
1 John
2 Adam
3 Eve
Items
pk user_pk status
1 1 0
2 1 1
3 2 0
Я хочу создать select, который возвращает всех пользователей, у которых есть 1 или более элементов со статусом> 0.
В приведенном выше случае я хотел бы вернуть только Джона, поскольку он единственный, у кого есть элемент со статусом 1.
Ответ №1:
Попробуйте это:
SELECT DISTINCT u.username
FROM users u INNER JOIN items it
ON u.pk = it.user_pk
WHERE it.status > 0
Ответ №2:
SELECT Users.username FROM Users JOIN Items
ON Users.pk = Items.pk
WHERE Items.status>0
Комментарии:
1. OP не спрашивал, но, вероятно, его лучше использовать
DISTINCT
для привлечения отдельных пользователей 🙂2. Я не использовал DISTINCT, потому что таким образом он может выбрать другие поля и получить их, например, если он хочет получить имя пользователя и все элементы с количеством> 0
Ответ №3:
SELECT `Users`.`username`
FROM `Users`, `Items`
WHERE `Items`.`status` > 0
AND `Users`.`pk` = `Item`.`user_pk`;
Комментарии:
1. Явное ОБЪЕДИНЕНИЕ (см. Другие ответы) лучше, чем неявное 😉