检查SQL Server中是否存在数据

问题描述:

我正试图从我的表中创建一个检查。我有三张表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

使用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

使用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

我认为你正在寻找类似下面的查询的内容:

SELECT * 
FROM Outlet O 
CROSS JOIN Hari H 
WHERE NOT EXISTS (SELECT * FROM Transaksi WHERE Outlet=O.OutletCode AND Tanggal=H.Days)