-1

私は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

次の結果を得るには、どの select ステートメントを使用する必要がありますか。

upc  | description  | QtyOnHand1 | QtyOnHand2
4050 | cantaloupe   | 10         | 15
4131 | fuji apples  | 20         | 23
5033 | strawberries | 5          | null
4121 |  apricots    | null       | 13
4

2 に答える 2

6

FULL OUTER JOIN問題は、 MySQL がサポートしていないが必要なことです。strawberriesFULL OUTER JOIN は両方のテーブルから行を返します。これにより、とのデータの両方に存在しない行を返すことができます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;

SQL Fiddle with Demoを参照してください。

これを記述する別の方法は、2 つのテーブルからそれぞれの DISTINCT リストを取得し、upcテーブルに 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 のストアがある場合などのメンテナンスの悪夢になるでしょう。

于 2013-09-09T19:16:13.380 に答える