2015-01-06 3 views
1

Я разместил вопрос о 2 недели назад об отношении «один ко многим» между таблицами SQL. Теперь у меня есть другой сценарий. В принципе, есть две таблицы - coffee_users и coffee_product_registrations. Последний подключен к таблице coffee_users с колонкой «uid». Итак, в основном coffee_users.uid = coffee_product_registrations.uidс использованием JOIN и подзапроса в mysql

Один пользователь может зарегистрировать несколько продуктов.

Что я хочу сделать, так это отобразить некоторую информацию о продукте (из coffee_product_registrations) вместе с информацией о пользователе (от coffee_users), но получить только те строки, которые имеют более 1 регистрации продукта.

Так упростить, вот шаги, мне нужно взять с собой:

  1. Объединить две таблицы
  2. Выберите пользователей, которые имеют несколько продуктов зарегистрировано
  3. Показать все их продукты вместе с их именами и вещи

Мой текущий запрос SQL выглядит следующим образом:

SELECT c.uid, c.name, cpr.model 
FROM coffee_users c 
JOIN coffee_product_registrations cpr on c.uid = cpr.uid 
GROUP BY c.uid 
HAVING COUNT(cpr.uid) > 1 

Это объединяет две таблицы в столбце «uid», но отображает только 1 строку для каждого пользователя. Он выбирает только пользователей, у которых зарегистрировано несколько продуктов.

Теперь мне нужно взять эти идентификаторы и выбрать ВСЕ товары из coffee_product_registrations на их основе.

Я не могу понять, как это сделать в одном запросе.

ответ

1

Заменить cpr.*, c.* с колоннами, которые вы хотите извлечь feom запрос

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

SELECT cpr.*, c.* 
FROM coffee_product_registrations cpr 
INNER JOIN coffee_users c ON c.uid = cpr.uid 
INNER JOIN (SELECT cpr.uid 
      FROM coffee_product_registrations cpr 
      GROUP BY cpr.uid 
      HAVING COUNT(DISTINCT cpr.productId) > 1 
      ) AS A ON c.uid = A.uid; 
+0

Возвращает пустой результат. Так должен ли я иметь 2 внутренних соединения? У меня его нет? – Bravi

+0

Хорошо, я сделаю это сейчас. Спасибо – Bravi

+0

http://sqlfiddle.com/#!2/59078 является sqlfiddle. Я создал 2 имени пользователя - user1 и user2. user1 имеет 2 продукта, зарегистрированных в разделе coffee_product_registrations, а user2 - только 1. Таким образом, запрос должен выбрать все продукты пользователя1 и отобразить оба продукта в дополнение к электронной почте и идентификатору пользователя1. – Bravi

Смежные вопросы