我有三个表定义为:
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 :(得分:2)
您正在使用空表进行INNER JOIN
。这将总是给你0个结果(INNER JOIN
给你3个表之间的“交集”。因为其中一个是空的,交集不存在。)
如果您想要车库和汽车的信息,即使没有来自garageInfo的信息,您也必须使用garage_info进行LEFT JOIN
:
SELECT *
FROM garage p,
INNER JOIN car m ON p.crId = m.crId
LEFT JOIN garageInfo gr ON gr.grId = p.grId