MySQL: Почему возникает ошибка, когда я использую EXCEPT для исключения некоторых строк из исходного выбора? - PullRequest
0 голосов
/ 06 августа 2020

Кредит: Leetcode 1264

Таблица: Дружба

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user1_id      | int     |
| user2_id      | int     |
+---------------+---------+
(user1_id, user2_id) is the primary key for this table.
Each row of this table indicates that there is a friendship relation between user1_id and user2_id.
 

Таблица: Лайки

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| page_id     | int     |
+-------------+---------+
(user_id, page_id) is the primary key for this table.
Each row of this table indicates that user_id likes page_id.
 

Напишите SQL запрос к рекомендовать страницы пользователю с user_id = 1, используя страницы, которые понравились вашим друзьям. Он не должен рекомендовать страницы, которые вам уже понравились.

Возвращать таблицу результатов в любом порядке без дубликатов.

Формат результата запроса находится в следующем примере:

Friendship table:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1        | 2        |
| 1        | 3        |
| 1        | 4        |
| 2        | 3        |
| 2        | 4        |
| 2        | 5        |
| 6        | 1        |
+----------+----------+
 
Likes table:
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1       | 88      |
| 2       | 23      |
| 3       | 24      |
| 4       | 56      |
| 5       | 11      |
| 6       | 33      |
| 2       | 77      |
| 3       | 77      |
| 6       | 88      |
+---------+---------+

Result table:
+------------------+
| recommended_page |
+------------------+
| 23               |
| 24               |
| 56               |
| 33               |
| 77               |
+------------------+
User one is friend with users 2, 3, 4 and 6.
Suggested pages are 23 from user 2, 24 from user 3, 56 from user 3 and 33 from user 6.
Page 77 is suggested from both user 2 and user 3.
Page 88 is not suggested because user 1 already likes it.

My код:

select distinct(l1.page_id) as recommended_page
from Likes l1
left join Friendship f
on l.user_id = f.user2_id
where user1_id = 1


UNION

select distinct(l2.page_id) as recommended_page
from Likes l2
left join Friendship f
on l.user_id = f.user1_id
where user2_id = 1

EXCEPT 

select page_id as recommended_page
from Likes
where user_id = 1

Пока есть ошибка рядом except. Может ли кто-нибудь помочь мне понять, почему? Спасибо вам огромное!

1 Ответ

0 голосов
/ 06 августа 2020

Leetcode использует MySQL, который не поддерживает ключевое слово EXCEPT.

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

select recommended_page from
(
select distinct(l1.page_id) as recommended_page
from Likes l1
left join Friendship f
on l.user_id = f.user2_id
where user1_id = 1

UNION

select distinct(l2.page_id) as recommended_page
from Likes l2
left join Friendship f
on l.user_id = f.user1_id
where user2_id = 1
) x

WHERE recommended_page NOT IN
(
select page_id as recommended_page
from Likes
where user_id = 1
)
...