mysql不在之间,在MySQL环境中!=和NOT之间的区别

我有一个关于!=和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子句,我可以获得正确的结果。 我很好奇这两种方法的区别。

谢谢你的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值