当前位置: 首页 > 知识库问答 >
问题:

如何根据not条件连接两个表的结果

江洲
2023-03-14

创建表TableA(id int,名称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,名称varchar(20),零件号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');

我尝试了以下的查询,所有的结果都是相同的14个记录,这是不正确的。

查询1:

选择b.ID作为Bid,b.Name作为Bname,b.PartNumber作为BPart,a.ID作为Aid,a.Name作为Aname,a.PartNumber作为远离表BB左联接表a在a.PartNumber上!=b.PartNumber;

选择b.ID作为Bid,b.Name作为Bname,b.PartNumber作为BPart,a.ID作为Aid,a.Name作为Aname,a.PartNumber作为表b b,表a a中a.PartNumber!=b.PartNumber;

质疑三:

选择b.ID作为Bid,b.Name作为Bname,b.PartNumber作为BPart,a.ID作为Aid,a.Name作为Aname,a.PartNumber作为远离表b b左联接表a上的a PartNumber不在(选择a.ID作为表a上的AIDB b联接表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的记录,其中PartNumber10,20因为值存在于TableB的PartNumber中。

共有1个答案

云胤
2023-03-14

您可以使用以下查询:

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    

其思想是使用not exists子句从tablea中选择所有必需的记录。然后用table1交叉联接从该查询导出的表,以获得所有可能的组合。

此处演示

 类似资料:
  • 我有两个表--例如TableA和TableB,其中有一些数据,如本文所定义的--如何基于not条件连接两个表的结果 现在我计划为两个表创建Hibernate实体,并且这些实体彼此不相关。 现在我想要得到基于NOT条件的结果,就像我前面提到的文章中给出的那样。 结果是使用SQL查询: 现在如何为这样的场景创建HQL查询或条件查询。我已经阅读了HQL&Criteria查询的Hibernate文档,但我

  • 我有三张桌子 表A 我需要根据传递的参数将TableA连接到TableB或TableC。ie 我尝试了以下查询 但是,这是给语法错误。有人能帮忙吗? 解决方案:

  • 我有两张桌子:学生桌和收费桌 学生 费用 我想让学生(谁没有支付费用)为虚构:像这样... 我的代码是: 我在两个月的所有学生中都得到了零值------------------------------------- 修正后,这段代码可以在mysql工作台上运行,但不能在Java应用程序中运行。

  • 问题内容: 我有2个表,说&定义如下: 创建表TableA(id int,name varchar(20),partNumber varchar(30)); 其值为: 创建表TableB(id int,name varchar(20),partNumber varchar(30)); 现在,在结果中,我要连接两个表,并从中获取所有记录,并且仅从中获取与的任何值都不匹配的列值的那些记录。 我在下面的

  • 我正在开发一个基于SAAS的站点,我必须将两个DBs中的两个表连接起来,比如说DB1中的table1和DB2中的table2。我必须使用cakephp中的join从表1和表2获取匹配记录,但它会抛出如下错误: 错误:SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT命令拒绝用户'dbname'@'localhost'访问表'table_name'。 有谁能解释一下如何使用c

  • 如何在使用某些条件筛选每个表之后连接两个表,并在获得筛选结果后连接两个结果。 已尝试代码,但显示语法错误