2016-07-26 33 views
1

我正試圖從我的表中創建一個檢查。我有三張表haritransaksi & 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是主表,transaksi是事務表。現在,當我嘗試選擇沒有任何交易的插座時,我遇到了問題。

我期望的結果是這樣的

| 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

使用CROSS JOIN,然後LEFT JOIN

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

這是我第一次使用'交叉連接',它的魅力 – YVS1102

+0

,但爲什麼呢? 'WHERE T.Days IS NULL' – YVS1102

+0

@ YVS1102因爲如果左連接沒有在Transaksi T上找到數據.Days將爲空,那就是你要找的 – 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)