我有三张桌子。
表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
感谢。
答案 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)
保持简单:)
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