如何加入2个MySql表

时间:2013-09-09 19:04:33

标签: mysql

我有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

2 个答案:

答案 0 :(得分:6)

问题是你需要一个MySQL不支持的FULL OUTER JOIN。 FULL OUTER JOIN将返回两个表中的行,这样您就可以返回数据中不存在的行strawberriesapricots

您可以使用类似于以下内容的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;

SQL Fiddle with Demo

可以编写的另一种方法是从两个表中获取每个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;

请参阅SQL Fiddle with Demo

作为旁注,您可能想重新考虑为每个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;