如何根据需要进行查询以选择数据

时间:2018-06-12 19:43:14

标签: sql sql-server

我有三张桌子。

表1

 item  desc
 1     item1
 2     item2
 3     item3

表2:

 item2  desc2
 1     item1
 2     item2
 3     item3

表3:

 item1  item2  quantity
 1      1      5
 1      2      4 
 2      2      3
 3      1      10

现在在表3中,第1列(第1项)是Table1的外键,第2列(第2项)是Table2的外键。现在我想编写一个查询来获取记录,如果它会交叉连接所有可能的组合,如果某些记录的某些组合确实存在,则显示它们的数量为0。

我想要这样的结果:

 item1  item2  quantity
 1      1      5
 1      2      4 
 1      3      0
 2      2      3
 2      1      0
 2      3      0
 3      1      10
 3      2      0
 3      3      0

感谢。

3 个答案:

答案 0 :(得分:2)

使用cross join

select t1.item as Item1, t2.item as Item2, coalesce(t3.quantity, 0) as quantity
from table1 t1 cross join 
     table2 t2 left join 
     table3 t3 
     on t3.item1 = t1.item and t3.item2 = t2.item
order by t1.item, t3.quantity desc, t2.item;

答案 1 :(得分:1)

保持简单:)

DB-Fiddle

SELECT t1.item, t2.item2, IFNULL(t3.quantity, 0) as quantity
FROM
    t1  JOIN t2
    LEFT JOIN t3 ON t3.item1 = t1.item AND t3.item2 = t2.item2

JOIN不包含ON->将所有内容连接到所有内容

LEFT JOIN将数据添加到行(在这种情况下为quantity),但行保持完整

答案 2 :(得分:0)

假设名为@ tab1,@ tab2和@ tab3的表,您可以执行以下操作:

SELECT b.item, b.item2, IsNull(a.quantity, 0) as quantity
FROM (SELECT item, item2 FROM @tab1 CROSS APPLY @tab2) b
FULL OUTER JOIN @tab3 a ON a.item1 = b.item AND a.item2 = b.item2