2014-12-26 2 views
0

У меня есть две таблицы Таблица A и Таблица BВыберите с помощью LEFT OUTER JOIN с условием

Таблица A

1. *id* 
2. *name* 

Таблица B

1. *A.id* 
2. *datetime* 

I хочу выбрать

1. *A.id* 
2. *A.name* 
3. *B.datetime* 

Даже если таблица B не содержит строку с A.id на определенный день, и он должен заменить этот столбец с NULL

например

Таблица A содержит

1. *(1 , Haris)* 
2. *(2, Hashsim)* 

Таблица B Содержит следующие данные на сегодняшний день.

1. *(1, '2014-12-26 08:00:00')* 

Я должен показать 2 результатов с идентификатором и вместо только ид .

Использование LEFT OUTER JOIN с предложением WHERE делает LEFT INNER JOIN, как обойти это?

ответ

0

Используйте LEFT OUTER JOIN, чтобы получить все строки из Left table и один, который не имеет матч будет иметь NULL значения в Right table колонках

SELECT A.id, 
     A.name, 
     B.[datetime] 
FROM tableA A 
     LEFT OUTER JOIN tableB B 
        ON A.Id = B.id 
         AND B.[datetime] < @date 
+0

Если я добавлю WHERE к запросу для конкретных дата покажет, что они присутствуют, , например. WHERE B.datetime <= 'myDateTime' он даст результаты для тех, у которых есть идентификатор в таблице B. Что делать с этим –

+0

@HarisMehmood Да, как это работает, предоставляя where where WHERE B.datetime <= 'myDateTime' 'you ** преобразование **' left join' в 'inner join' –

+0

Да, я понял, что это было очевидно, есть ли работа? –

0
SELECT a.id, a.name, b.datetime 
FROM A 
LEFT JOIN B on B.aid = a.id 
WHERE coalesce(B.datetie, '1900-01-01') < @MyDateTime 
+0

Я хочу его на конкретную дату, если Я добавляю WHERE B.datetime <= 'my datetime' , он дает только результаты, которые присутствуют в таблице B. –

1
SELECT A.id, A.name, b.datetime 
FROM A 
LEFT Outer JOIN B on B.id = A.id 
0
Select A.id,A.name,B.datetime 
from tableA A 
Left join 
(
    SELECT B.ID,B.datetime 
    FROM tableB B 
    WHERE B.datetime <= 'myDateTime' 
)B 
ON A.aid = B.id