我有一个关于!=和NOT在MySQL环境中的区别的问题。 原质询如下:
表:友谊+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user1_id | int |
| user2_id | int |
+---------------+---------+
(user1_id,user2_id)是此表的主键。 该表的每一行都表示user1_id和user2_id之间存在友谊关系。
表:喜欢+-------------+---------+
| Column Name | Type |
+-------------+---------+
| user_id | int |
| page_id | int |
+-------------+---------+
(user_id,page_id)是此表的主键。 此表的每一行都表示user_id与page_id相似。
编写一个SQL查询,使用您朋友喜欢的页面向user_id=1的用户推荐页面。 它不应该推荐你已经喜欢的页面。
以任何顺序返回不带重复项的结果表。
查询结果格式如下所示:
友谊表:+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 6 | 1 |
+----------+----------+
喜欢表格:+---------+---------+
| user_id | page_id |
+---------+---------+
| 1 | 88 |
| 2 | 23 |
| 3 | 24 |
| 4 | 56 |
| 5 | 11 |
| 6 | 33 |
| 2 | 77 |
| 3 | 77 |
| 6 | 88 |
+---------+---------+
结果表:+------------------+
| recommended_page |
+------------------+
| 23 |
| 24 |
| 56 |
| 33 |
| 77 |
+------------------+
用户1是用户2,3,4和6的朋友。 建议的页面是来自用户2的23,来自用户3的24,来自用户3的56和来自用户6的33。 用户2和用户3都建议页77。 不建议使用第88页,因为用户1已经喜欢它。
而我的做法是:# Write your MySQL query statement below
select distinct
page_id as 'recommended_page'
from likes
where user_id in (
(select
user2_id as user_id
from friendship
where user1_id = 1)
union
(select
user1_id as user_id
from friendship
where user2_id = 1)
) and page_id <> (
select
page_id
from likes
where user_id = 1
)
但是我将收到NULL作为以下测试用例的结果:{"headers":{"Friendship":["user1_id","user2_id"],
"Likes":["user_id","page_id"]},
"rows":{"Friendship":[[1,3],[1,5],[1,6],[2,3],[3,5],[3,9],[4,6],[5,9],[8,9]],
"Likes":[[6,13],[8,10],[9,14]]}}
如果我切换到IN子句,我可以获得正确的结果。 我很好奇这两种方法的区别。
谢谢你的帮助。