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多年前)中已经停止使用