SQL嵌套内连接?或内部联接的条款?

时间:2016-05-25 21:57:13

标签: sql sql-server join

我正在尝试编写一个查询问题。不幸的是,我只能查询数据库,无法更改架构。以下是一些简化的示例表:

Table 1
itemID          sale date
----------------------------
1                 1/2015
1                 3/2016
2                 5/2016
2                 1/2015

Table 2
itemID           colorID           price
--------------------------------------
1                 1                23
1                 2                10
1                 3                13
2                 1                11
2                 2                14
2                 3                18

Table 3
ColorID       color
---------------------------------------
 1             Red
 2             Blue
 3             Green

Table 4
SaleBegin       SaleEnd      ColorID
----------------------------------------
1/1/2014        12/31/2014      1
1/1/2015        12/31/2015      2
1/1/2016        12/31/2016      3

现在我需要一个查询,它基本上可以获得第一个表中两个项ID的价格和颜色。我不知道如何使用这个架构,即使只是一个。我试过像:

SELECT item_id, price, color FROM Table1 T1

INNER JOIN Table2 T2
ON T1.ItemID=T2.ItemID

INNER JOIN Table3 T3
ON T2.ColorID=T3.ColorID

INNER JOIN  Table4 T4
ON T3.ColorID=T4.ColorID

WHERE T1.itemID between SaleBegin AND SaleEnd

但它并不适合我,而是为每件商品提供各种颜色和价格。我究竟做错了什么?我如何获得这些价值观?预期结果应如下所示:

    itemID     color      price  
------------------------------------
    1           Blue        10
    1           Green       13
    2           Green       18
    2           Blue        14

2 个答案:

答案 0 :(得分:0)

http://sqlfiddle.com/#!9/e6fac/4

SELECT t1.itemID
     , t3.color
     , t2.price
  FROM table_1 t1
  LEFT JOIN table_2 t2
    ON t1.itemID = t2.itemID
  LEFT JOIN table_3 t3
    ON t2.colorID = t3.colorID
  LEFT JOIN table_4 t4
    ON t3.colorID = t4.colorID
  WHERE t1.sale_date BETWEEN saleBegin and saleEnd;

答案 1 :(得分:0)

我不确定这是您要找的,但此查询会在每次促销期间为您提供每种产品的itemID,颜色和价格

SELECT
   t4.SaleBegin
  ,t4.SaleEnd
  ,t1.itemID
  ,t3.color
  ,t2.price
FROM Table4 t4
INNER JOIN Table1 t1
  ON t4.SaleBegin = CAST(REPLACE(t1.[sale date], '/', '/1/') AS DATE)
INNER JOIN Table2 t2
  ON t1.itemID = t2.itemID
  AND t4.ColorID = t2.ColorID
INNER JOIN Table3 t3
  ON t4.ColorID = t3.colorID

以下是SQL Fiddle