Sql 包含空表时查询未返回预期结果
我有三个表,定义如下:Sql 包含空表时查询未返回预期结果,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有三个表,定义如下: CREATE TABLE [garageInfo] ( [griId] int identity(1,1) NOT NULL, [grId] int NOT NULL, [shId] int NOT NULL, [subEquipment] varchar(100) NULL, [make] varchar(50) NULL, [model] varchar(50) NULL, [serialNo] varcha
CREATE TABLE [garageInfo] (
[griId] int identity(1,1) NOT NULL,
[grId] int NOT NULL,
[shId] int NOT NULL,
[subEquipment] varchar(100) NULL,
[make] varchar(50) NULL,
[model] varchar(50) NULL,
[serialNo] varchar(50) NULL,
[pcr] varchar(50) NULL,
[mop] varchar(50) NULL,
[mopDesc] varchar(50) NULL
)
;
CREATE TABLE [car] (
[crId] int identity(1,1) NOT NULL,
[crDli] smallint NULL,
[crName] varchar(60) NULL
)
;
CREATE TABLE [garage] (
[grId] int identity(1,1) NOT NULL,
[grName] varchar(100) NOT NULL,
[grDli] smallint NULL,
[crId] int NOT NULL
)
;
当我运行以下查询时,表garage
和car
包含数据并返回预期记录
select * from garage p, car m WHERE p.crId=m.crId
但是garageInfo
当前是空的,但是会在时间之前被记录填满,但是我运行了以下查询,返回0
行,我希望它给我的是garageInfo
的所有列都是空的,其他表中的两列都有各自的值,但事实并非如此
select * from garage p, car m, garageInfo gr WHERE p.crId=m.crId AND gr.grId=p.grId
有谁能帮我这里出了什么问题吗?您正在使用空表进行
内部联接。这将始终为您提供0个结果(internaljoin
为您提供3个表之间的“交集”。因为其中一个表为空,交集不存在)
如果您想要车库和汽车的信息,即使没有车库信息,您也必须使用车库信息进行左连接:
SELECT *
FROM garage p,
INNER JOIN car m ON p.crId = m.crId
LEFT JOIN garageInfo gr ON gr.grId = p.grId
-这种旧式的逗号分隔表列表样式在ANSI-92 SQL标准(20多年前)中已经停止使用