SQL中的左联接是否在第二个表中显示匹配的值?
我看到下面的问题,我相信这是错误的,但正确的答案是正确的 客户和代理表上的左外部联接,带有 首先列出的客户和列出的代理 在SQL命令中的第二步,生成 客户表,包括那些没有 代理表中的匹配值 基于上述问题,应选择以下内容:SQL中的左联接是否在第二个表中显示匹配的值?,sql,join,left-join,Sql,Join,Left Join,我看到下面的问题,我相信这是错误的,但正确的答案是正确的 客户和代理表上的左外部联接,带有 首先列出的客户和列出的代理 在SQL命令中的第二步,生成 客户表,包括那些没有 代理表中的匹配值 基于上述问题,应选择以下内容: select C.*, A.* from Customer C left join Agent A on A.CID = C.CID 因此,上面语句的结果是Customer表中的所有行+Customer和Agent表中匹配的值。(我的教授说正确/错误的问题是正确的,但似乎是错
select C.*, A.*
from Customer C
left join Agent A on A.CID = C.CID
因此,上面语句的结果是Customer表中的所有行+Customer和Agent表中匹配的值。(我的教授说正确/错误的问题是正确的,但似乎是错误的)
如果你尝试一下,你会很容易看到引用的语句是正确的。当代理表中不存在匹配行时,客户行仍然显示,例如下面的客户2
declare @Customer table (id int, [Name] varchar(32));
declare @Agent table (id int, CustomerId int, [Name] varchar(32));
insert into @Customer (id, [Name])
values
(1, 'Test Customer 1'),
(2, 'Test Customer 2');
insert into @Agent (id, CustomerId, [Name])
values
(1, 1, 'Test Agent 1');
select C.id [Customer id], C.[Name] [Customer Name], A.id [Agent id], A.CustomerId [Agent Customer id], A.[Name] [Agent Name]
from @Customer C
left join @Agent A on A.CustomerId = C.id;
结果
客户id
客户名称
代理id
代理客户id
代理名称
1.
测试客户1
1.
1.
测试剂1
2.
测试客户2
无效的
无效的
无效的
是的,但有一点需要注意:如果
Customer
中的一行在Agent
中有多个匹配项,那么Customer
中的一行将在结果集中显示多次,每个匹配行显示一次。MySQL或(MS)sql server?@MajidRezaie我认为这是真的,因为Customer中的所有行都将显示出来。然而,其中一些会多次出现。对或错,我发现它作为一种思考连接的方式有点有限。PS遵循出版的教科书,而不是随机的网页。因此,关于定义的关系数据库答案也大多毫无用处。请注意,链接到我的答案的所有其他答案都没有准确解释外部连接返回的内容&除了一个之外,其他所有答案都不清楚&没有帮助。就像你的报价一样。公认的答案非常糟糕。在那里读我所有的评论。