2013-12-08 69 views
0

我定義爲三個表時:查詢沒有返回預期的結果,包括一個空表

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 
) 
; 

表​​和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

[不良習慣踢:使用舊樣式的JOIN(HTTP: //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表格樣式列表*樣式已停止使用ANSI - ** 92 ** SQL標準(超過** 20年前**) –

回答

2

你正在做一個空表INNER JOIN。這總會給你0個結果(INNER JOIN給你3個表之間的「交集」,因爲其中一個是空的,交集不存在)。

如果你想從車庫和汽車的信息,即使沒有garageInfo有信息,你必須做一個LEFT JOIN與garage_info:

SELECT * 
FROM garage p, 
INNER JOIN car m ON p.crId = m.crId 
LEFT JOIN garageInfo gr ON gr.grId = p.grId