MySQL три таблицы соединения, найти рейтинг элемента - PullRequest
1 голос
/ 27 февраля 2011

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

Мой образец данных:

item
----
item_id  item_name  item_added
1        Apple      <date_time>
2        Banana     <date_time>

user
----
user_id  user_name
1        Alice
2        Bob
3        Carol

rating
------
rating_id  item_id  user_id  rating_value
1          1        1        3
2          1        2        4
3          1        3        5
4          2        1        5
5          2        2        2

Я хочу узнать, какой рейтинг все три пользователя дали конкретному элементу. Вывод должен включать NULL для rating_value, если пользователь не оценил элемент. Например, если у меня есть item_id 2, я бы хотел получить такой вывод:

user_name    item_name    rating_value
Alice        Banana       5
Bob          Banana       2
Carol        Banana       NULL

Я перепробовал все виды соединений, но я просто не могу понять это.

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011

Похоже, вы хотите декартово произведение пользователя и предмета, которое затем будет объединено с рейтингом:

select user_name, item_name, rating_value
from user as u, item as i
left join rating as r
  on r.user_id = u.user_id
 and r.item_id = i.item_id

Я не проделывал серьезной работы с MySQL в течение 4,5 лет, но это следует сделать.

Редактировать: Возможно, MySQL требует AS для псевдонимов таблицы.

1 голос
/ 27 февраля 2011
select u.user_name, i.item_name, r.rating_value
from item i,user u 
left join rating r
on r.user_id = u.user_id
and r.item_id = i.item_id

Это должно сработать ..

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