【发布时间】:2015-08-19 02:48:30
【问题描述】:
我有 2 个表,比如 TableA 和 TableB 定义如下:
创建表TableA(id int, name varchar(20), partNumber varchar(30));
值为:
insert into TableA values(1,'a1','10');
insert into TableA values(2,'a2','20');
insert into TableA values(3,'a3','30');
insert into TableA values(4,'a4','40');
创建表 TableB(id int, name varchar(20), partNumber varchar(30));
insert into TableB values(5,'b1','10');
insert into TableB values(6,'b2','20');
insert into TableB values(7,'b3','60');
insert into TableB values(8,'b4','70');
现在在结果中,我想加入这两个表并从TableB 获取所有记录,并且只从TableA 获取那些记录,其中TableA's partNumber 列值与TableB's partNumber 的任何值都不匹配。
我尝试了以下查询,所有查询都给出了 14 条不正确记录的相同结果。
查询 1:
选择 b.id 作为 Bid,b.name 作为 Bname,b.partNumber 作为 BPart,a.id 作为 Aid, a.name as Aname, a.partNumber as APart from TableB b left join 表A a.partNumber!=b.partNumber;
查询 2:
选择 b.id 作为 Bid,b.name 作为 Bname,b.partNumber 作为 BPart,a.id 作为 Aid, a.name as Aname, a.partNumber as APart from TableB b , TableA a 其中 a.partNumber!=b.partNumber;
查询 3:
选择 b.id 作为 Bid,b.name 作为 Bname,b.partNumber 作为 BPart,a.id 作为 Aid, a.name as Aname, a.partNumber as APart from TableB b left join TableA a on a.partNumber not in (select a.id as Aid from TableB b join 表A a.partNumber=b.partNumber);
有人可以帮我在哪里犯错吗?获得结果的正确方法是什么。
我希望输出是这样的:
+------+-------+-------+------+-------+-------+
| Bid | Bname | BPart | Aid | Aname | APart |
+------+-------+-------+------+-------+-------+
| 5 | b1 | 10 | 3 | a3 | 30 |
| 5 | b1 | 10 | 4 | a4 | 40 |
| 6 | b2 | 20 | 3 | a3 | 30 |
| 6 | b2 | 20 | 4 | a4 | 40 |
| 7 | b3 | 60 | 3 | a3 | 30 |
| 7 | b3 | 60 | 4 | a4 | 40 |
| 8 | b4 | 70 | 3 | a3 | 30 |
| 8 | b4 | 70 | 4 | a4 | 40 |
+------+-------+-------+------+-------+-------+
所以我的意思是在结果中我不想要TableA 的记录,其中partNumber 是10, 20,因为这些值存在于TableB's partNumber 中。
【问题讨论】: