如何解决如何基于非条件联接2个表的结果
您可以使用以下查询:
SELECT id, name, partNumber, Aid, Aname, Apart
FROM TableB AS t
CROSS JOIN (SELECT id AS Aid, name AS Aname, partNumber AS Apart
FROM TableA AS a
WHERE NOT EXISTS (SELECT 1
FROM TableB AS b
WHERE b.partNumber = a.partNumber)) AS c
ORDER BY id
想法是TableA
使用NOT EXISTS
子句选择所有必需的记录。然后CROSS
JOIN
从该查询派生的表与,Table1
以获取所有可能的组合。
解决方法
我有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中选择b.id作为Bid,b.name作为Bname,b.partNumber作为BPart,a.id作为Aid,a.name作为Aname,a.partNumber作为APart从TableB
b左连接a.partNumber!= b上的TableA a 。零件号;
查询2:
从TableB
b中选择b.id作为Bid,b.name作为Bname,b.partNumber作为BPart,a.id作为Aid,a.name作为Aname,a.partNumber作为APart,来自TableB
b,TableA a其中a.partNumber!= b。零件号;
查询3:
选择TableB中的b.id作为Bid,b.name作为Bname,b.partNumber作为BPart,a.id作为Aid,a.name作为Aname,a.partNumber作为APart从表B中左移到TableA
a上a.partNumber不在(从TableB中选择a.id作为Aid。b在a.partNumber = b.partNumber上加入TableA
a);
有人可以帮我在这里我犯错的地方吗?什么是获得结果的正确方法。
我期望输出是这样的:
+------+-------+-------+------+-------+-------+
| 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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。