mysql – 编辑:SQL多个表实例

我有这张桌子:

SUBSCRIPTION

NAME SUBSCRIBER

它本质上是一个表,其中列出了彼此订阅的人员列表.我想编写一个输出元组列表的查询,这样,如果集合B代表所有订阅A的人,B也代表A不订阅的人.即,找到彼此不相互认购的人员列表.

这是我写的查询:

SELECT A.name, B.name 
FROM subscription AS A, subscription AS B 
WHERE A.subscriber=B.name AND A.name!=B.subscriber;

即,它应该显示两列A和B,其中B订阅A而A不订阅B.

我得到的只是垃圾,有很多行重复.我在这做错了什么?

好吧,我在陈述样品时犯了一个错误.样本是这样的:

梅丽莎,琼订阅了约翰.
查尔斯,约翰订阅了琼.
查尔斯订阅了梅丽莎.
梅丽莎,琼想订阅查尔斯.

第一部分引用订阅者列,第二部分引用名称列.
也就是说,约翰的名字和梅丽莎,约翰订阅了约翰.

因此,它应该输出(梅丽莎,约翰)因为约翰不订阅梅丽莎.

这将如何改变查询?

最佳答案 这将从订阅表中提取所有记录,其中订阅表中没有对应订阅的相应匹配.

select subscriber, name
from subscription a
where not exists (
  select 1
  from subscription b
  where a.subscriber = b.name
        and a.name = b.subscriber)
点赞