请记住,我是MySQL的新手。
当我尝试选择一组结果时,我感到困惑。
select A.userNum from tableOne A, tableTwo B where A.userNum!=B.userNum;
(表A包含用户的用户号码和电话号码。表B包含用户的地址簿。)
ResultSet包含多组类似的结果。每个结果都省略了我在where子句中指定的一个userNum。 (见本问题的结尾)
如何获得只包含一个满足“where A.userNum!= B.userNum”子句的结果的ResultSet?
假设我有两个表,用户和地址簿。
表'adressbook'基本上是一本地址簿。表'users'是一个包含用户电话号码的表。
我创建了表格。为简单起见,'userNum'和'phone'号码在'users'表中相同。
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不会重复。)
问题从这里开始。
使用上面的选择陈述作为子查询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的用户名?
答案 0 :(得分:2)
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) ;