2013-12-08 1 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 
) 
; 

В таблице 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

[Плохие привычки пнуть: использование старого стиля 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 дает вам «пересечение» между тремя таблицами. Поскольку один из них пуст, пересечения не существует).

Если вы хотите информацию от гаража и автомобиля, даже не имея информацию от 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 
Смежные вопросы