我有2张桌子。 Table1
包含商店#1和商店中的商品库存
Table2
包含商店#2
Table1:
upc | description | QtyOnHand1
4050 | cantaloupe | 10
4131 | fuji apples | 20
5033 | strawberries | 5
Table2
upc | description | QtyOnHand2
4050 | cantaloupe | 15
4131 | fuji apples | 23
4121 | aprictos | 13
我应该使用什么选择语句来获得以下结果。
upc | description | QtyOnHand1 | QtyOnHand2
4050 | cantaloupe | 10 | 15
4131 | fuji apples | 20 | 23
5033 | strawberries | 5 | null
4121 | apricots | null | 13
答案 0 :(得分:6)
问题是你需要一个MySQL不支持的FULL OUTER JOIN
。 FULL OUTER JOIN将返回两个表中的行,这样您就可以返回数据中不存在的行strawberries
和apricots
。
您可以使用类似于以下内容的UNION查询来模拟FULL OUTER JOIN:
SELECT t1.upc,
t1.description,
t1.QtyOnHand1,
t2.QtyOnHand2
FROM table1 t1
LEFT JOIN table2 t2
ON t1.upc= t2.upc
UNION
SELECT t2.upc,
t2.description,
t1.QtyOnHand1,
t2.QtyOnHand2
FROM table1 t1
RIGHT JOIN table2 t2
ON t1.upc = t2.upc;
可以编写的另一种方法是从两个表中获取每个upc
的DISTINCT列表,然后对表使用LEFT JOIN:
select d.upc,
coalesce(t1.description, t2.description) description,
t1.QtyOnHand1,
t2.QtyOnHand2
from
(
select upc from table1
union
select upc from table2
) d
left join table1 t1
on d.upc = t1.upc
left join table2 t2
on d.upc = t2.upc;
作为旁注,您可能想重新考虑为每个store
创建单独的表,当您拥有100家商店等时,这将成为维护的噩梦。
答案 1 :(得分:-4)
您将使用Join语句 像这样的东西:
select table1.upc, table1.description, table1.QtyOnHand1, table2.QtyOnHand2
from Table1, table2
left join table2 on table1.upc = table2.upc;