SQL连接表,将null放在不存在的值上

时间:2014-10-16 18:25:49

标签: sql sql-server join null cross-join

我试图根据访问日期找出哪个市场没有哪个产品。 为了做到这一点,我想如果我将所有产品都提供给所有市场,那么将有null个日期,因为市场上不会访问该产品。查看 我在市场上的所有产品都写了一个查询:

SELECT id, p.ProductName FROM atb_markets
CROSS JOIN
(SELECT StokAd FROM atb_products) p

我得到了这样的观点:

 MarketId   productName
    1         a
    1         b
    1         c
    1         d
    1         e
    1         f
    2         a
    2         b
    2         c
    2         d
    2         e
    .         .
    .         .

顺便说一下,这些都是不同的表(atb_marketsatb_products),日期保存在outformmobiledata表中。该表记录了市场的每个记录。 marketIdproductIddate持有此表(日期信息来自移动设备)。由于我需要productName,我还需要atb_products表。

最后,通过使用这三个表我需要这个视图。如果我得到null值,我就可以知道市场上不存在哪些产品。

这就是我需要的观点:

date        MarketId   productName
01.12.2013     1         a
11.12.2013     1         b
NULL           1         c
04.12.2013     1         d
20.12.2013     1         e
05.12.2013     1         f
06.12.2013     2         a
NULL           2         b
NULL           2         c
12.12.2013     2         d
NULL           2         e
.              .         .
.              .         .

**正如您在第二个表market_number1中所见,从未有过产品c

1 个答案:

答案 0 :(得分:1)

只需将LEFT OUTER JOIN用于outformmobiledata表:

SELECT d.date, m.id, p.ProductName
  FROM atb_markets m
  CROSS JOIN atb_products p
  LEFT OUTER JOIN outformmobiledata d
    ON d.marketId = m.id
    AND d.productId = p.id
ORDER BY m.id, p.ProductName