2016-07-26 3 views
1

Я пытаюсь создать проверку из своей таблицы. У меня есть три таблицы hari, transaksi & Outlet.Проверьте, существуют ли данные в SQL Server

Моя таблица hari имеет только один столбец days:

   days 
    2016-07-21 00:00:00.000 
    2016-07-22 00:00:00.000 
    2016-07-23 00:00:00.000 
    2016-07-24 00:00:00.000 
    2016-07-25 00:00:00.000 
    2016-07-26 00:00:00.000 

Моя вторая таблица является transaksi:

| outlet  | Tanggal | 
    K-MGAS  2016-07-23 
    K-JGMM2  2016-07-24 
    K-JGMM2  2016-07-25 
    K-CL4  2016-07-26 

и последний из которых является outlet:

| OutletCode | 
     K-MGAS 
     K-JGMM2 
     K-CL4 

Как вам могут видеть дни и outlet является главной таблицей, а транзаксом является таблица транзакций. Теперь у меня проблема, когда я пытаюсь выбрать выход, который не имеет никаких транзакций.

Мой желаемый результат, как этот

| Outlet |   Days   | 
    K-MGAS 2016-07-21 00:00:00.000 
    K-MGAS 2016-07-22 00:00:00.000 
    K-MGAS 2016-07-24 00:00:00.000 
    K-MGAS 2016-07-25 00:00:00.000 
    K-MGAS 2016-07-26 00:00:00.000 

Как я могу добиться этого?

+0

'Теперь у меня есть проблема, когда я пытаюсь выбрать выход, который не имеет транзакции' - Что вы пробовали? – MusicLovingIndianGirl

ответ

1

Используйте перекрестное соединение, а затем левый присоединиться

SELECT O.OutletCode 
     ,H.Days 
FROM Outlet O 
CROSS JOIN Hari H 
LEFT JOIN Transaksi T ON T.Outlet = O.OutletCode 
    AND T.Days = H.Days 
WHERE T.Days IS NULL 
+2

это мой первый раз, используя «cross join», и он работает с шармом – YVS1102

+0

, но почему это? 'WHERE T.Days IS NULL' – YVS1102

+0

@ YVS1102 Потому что если left join не найдет данные на Transaksi T.Days, будет null, и именно это вы искали – vercelli

1

Использование LEFT JOIN

SELECT O.* 
    FROM Outlet O 
LEFT JOIN Transaksi T ON T.Outlet = O.OutletCode 
WHERE T.Days IS NULL 
+0

Хм, это похоже на мой запрос. – YVS1102

+0

Вы не показали нам никакого кода :) –

+0

мой плохой. потому что я ненавижу поставить свою полную таблицу здесь, внутри моего вопроса я использую имя поддельного поля – YVS1102

0

Я думаю, что вы ищете что-то похожее на следующий запрос:

SELECT * 
FROM Outlet O 
CROSS JOIN Hari H 
WHERE NOT EXISTS (SELECT * FROM Transaksi WHERE Outlet=O.OutletCode AND Tanggal=H.Days) 
Смежные вопросы