выберите записи с количеством строк> 0 в другой таблице

#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. Явное ОБЪЕДИНЕНИЕ (см. Другие ответы) лучше, чем неявное 😉