微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何基于非条件联接2个表的结果

如何解决如何基于非条件联接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个表,说TableATableB定义如下:

创建表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并且仅从中获取与的任何值都不匹配TableATableA'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哪里的记录partNumber10,20因为这些值存在于中TableB's partNumber

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。