我有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
。
您可以使用以下查询:
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
以获取所有可能的组合。
演示在这里
创建表TableA(id int,名称varchar(20),partNumber varchar(30)); 值为: 创建表TableB(id int,名称varchar(20),零件号varchar(30)); 我尝试了以下的查询,所有的结果都是相同的14个记录,这是不正确的。 查询1: 选择b.ID作为Bid,b.Name作为Bname,b.PartNumber作为BPart,a.ID作为A
问题内容: 我在使用sql时遇到问题。我想加入两个表,雇员和班主任。条件是员工具有诸如“ u0871457”之类的unid列,其中作为班主任的EmplId为“ 00871457”。 我只想将EmplId的第一个字符替换为’u’即可加入,以匹配来自unid的字符串。我怎样才能做到这一点?到目前为止,我已经尝试过了: 但这导致结果集空白。 任何帮助将不胜感激。谢谢你的时间! 问题答案: 有很多方法可以
问题内容: 我需要根据其他几个表中的某些匹配值从一个表中选择结果。我有以下表格: 我需要返回每个团队的所有教练和球员的姓名。我只使用过内部联接,似乎无法在此处使用那些内部联接,所以知道如何执行此操作吗? 问题答案: 这将为您提供教练: 这将为您提供球员: 因此,非优雅,简单的答案就是将所有内容与一起扔掉。
问题内容: 我想用sequelize ORM获得这样的查询: 问题是,后遗症不允许我在where子句中引用“ B”或“ C”表。以下代码 给我 这是完全不同的查询和结果 甚至不是有效的查询: 使用sequelize是否可以进行第一个查询,还是我应该坚持使用原始查询? 问题答案: 将引用联接表的列包装在
问题内容: 我有第一个数据库 (dbA), 具有这样的表,名为 Username : 然后,在另一侧,我有 一个 带有这样的表的 dbB ,名为 PrivateMessage : 现在,如何组合来自2个不同数据库的这两个表,以便输出看起来像这样: 问题答案: 您可以简单地加入不同数据库的表。您需要在子句中指定数据库名称。要使其更短,请在其上添加一个, 但是有些方法却有可能-在其中没有消息。在这种情
问题内容: 给定以下示例表架构 客户表 发票表 目的是选择InvoiceID值为10和20(非OR)的所有客户。因此,在此示例中,将返回带有CustID = 1和2的客户。 您将如何构造SELECT语句? 问题答案: 使用: 关键是需要计数等于子句中参数的数量。 的使用是在对帐务编号和发票编号的组合没有唯一约束的情况下- 如果没有重复的机会,则可以从查询中省略DISTINCT: