【问题标题】:Why is my result duplicated when using subquery?为什么使用子查询时我的结果重复?
【发布时间】:2013-10-19 07:04:01
【问题描述】:

请记住,我是 MySQL 的新手。

当我尝试选择一组结果时卡住了。

select A.userNum from tableOne A, tableTwo B where A.userNum!=B.userNum;

(表A包含用户的userNum和电话号码。表B包含用户的地址簿。)

ResultSet 包含多组相似的结果。每个结果都省略了我在 where 子句中指定的一个 userNum。 (见本题结尾)

如何获得仅包含一个结果且满足“where A.userNum!=B.userNum”子句的 ResultSet?

这是一个我遇到问题的具体案例。

假设我有两个表,用户和地址簿。

表'地址簿'基本上是一个地址簿。表“用户”是一个包含用户电话号码的表。

我创建了表格。为简单起见,'users' 表中的 'userNum' 和 'phone' 号码是相同的。

create table users (
    userNum int,
    phone char(11)
);
insert into users values (1,'1');
insert into users values (2,'2');
insert into users values (3,'3');
insert into users values (4,'4');
insert into users values (5,'5');
insert into users values (6,'6');
insert into users values (7,'7');
insert into users values (8,'8');
insert into users values (9,'9');
insert into users values (10,'10');

create table addressbook (
    userNum int,
    phone char(11)
);
insert into addressbook values(1,'2');
insert into addressbook values(1,'3');
insert into addressbook values(2,'3');
insert into addressbook values(3,'4');
insert into addressbook values(5,'7');
insert into addressbook values(5,'8');
insert into addressbook values(6,'7');
insert into addressbook values(7,'8');
insert into addressbook values(7,'9');
insert into addressbook values(9,'10');

接下来,我将找出我朋友的朋友的“userNum”。假设我是 userNum 1。

首先,我找到了我朋友的“userNum”。

select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone;

然后使用此查询,我找到了我朋友的朋友的“userNum”。

select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C 
where C.userNum=B.userNum and A.phone=B.phone;

结果是 3,4。 (奇怪,这里的ResultSet在我使用子查询的时候不重复。)


问题从这里开始。

使用上面的 select 语句作为子查询 B,我试图获取不是我朋友的朋友的人的 'userNum'。

select A.userNum from users A, 
    (select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C where C.userNum=B.userNum and A.phone=B.phone) B 
    where A.userNum!=B.userNum;

结果

userNum
1
2
4
5
6
7
8
9
10
1
2
3
5
6
7
8
9
10

从结果中可以看出,有两组结果。第一个结果省略了 userNum 3,第二个结果省略了 userNum 4。

如何获得一组省略 userNum 3,4 的 userNum?

【问题讨论】:

  • 菜鸟问题...我是否在问题中使用了“子查询”一词?

标签: mysql sql database


【解决方案1】:
select A.userNum from users A where A.userNum NOT IN  (select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C where C.userNum=B.userNum and A.phone=B.phone) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2015-07-23
    相关资源
    最近更新 更多