我想使用相同的存储插件加入两个表。但是显示空值的列之一。
我正在使用此查询:-
select * from SqlServer.test_mopslive.reports as Reports join
SqlServer.test_mopslive.reportsetting as ReportSetting on Reports.ID = ReportSetting.ID
这里
SqlServer
是存储插件名称,test_mopslive
是数据库名称,reports
, reportsetting
是表名。执行此查询时 T_ID 显示 Null。
但是,如果我使用具有相同凭据的两个不同存储插件名称,则它可以正常工作。
表格1:-
create table Reports (ID bigint, Name varchar(25));
insert into Reports values (29, 'SqlThree');
insert into Reports values (30, 'SqlTwo');
insert into Reports values (31, 'SqlThree');
TABLE 2:-
CREATE TABLE ReportSetting
(
P_id bigint not null auto_increment primary key,
Name varchar(25),
ID bigint,
CONSTRAINT fk_ID FOREIGN KEY (ID)
REFERENCES Reports(ID));
insert into ReportSetting values (1,'My_Sreekant1', 29);
insert into ReportSetting values (2,'My_Sreekant2', 30);
insert into ReportSetting values (3,'My_Sreekant3', 31);
是否可以使用相同的存储插件名称连接两个表?如果是,那么我在这个查询中做错了什么?
最佳答案
您一直在更改问题和代码的文本 - 您之前和现在使用的是 RIGHT OUTER JOIN,您使用的是与 INNER JOIN 相同的普通 JOIN。
由于您使用的是 INNER JOIN,因此您不会从任一表中获取不满足您的连接条件的任何行:
join SqlServer.test_mopslive.reportsetting ReportSetting
on Reports.ID = ReportSetting.ID
如果您运行此查询(针对 SQL Server - 我不知道 Drill 是如何工作的),您将不会有任何 Reports.ID 或 ReportSetting.ID 不相等的行,也不会有任何行为空.这意味着,如果报告在 ReportSetting 表中没有任何条目,则该报告不会显示在您的结果集中,并且如果报告设置在报告表中没有匹配项,则它不会显示在您的结果集中.
如果您使用的是 RIGHT OUTER JOIN,您将获得 JOIN 中的所有行。目标 表 (ReportSetting),数据来自 JOIN 来源 (报告)在可用的情况下,否则在这些字段中为空。
如果您使用的是 LEFT OUTER JOIN,您将获得 JOIN 中的所有行。来源表(报告),数据来自 JOIN 目标 (报告设置)在可用的情况下,否则在这些字段中为 null。
如果您使用的是 FULL OUTER JOIN,您将获得 全部 来自 的行两者 表。在不匹配的字段中为空值。
关于sql-server - 具有相同插件和相同数据类型的 SQL Server 表的连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301247/