0

小売商品を表すデータベースがあります。一部のアイテムには複数のスキャンコードがありますが、本質的には同じアイテムです。それらの名前、コスト、小売は常に同じです。これをモデル化するために、データベースには次の構造があります

Inventory_Table

INV_PK | INV_ScanCode | INV_Name | INV_Cost | INV_Retail
  1    | 000123456789 |  Muffins | 0.15     | 0.30    
  2    | 000987654321 |  Cookie  | 0.25     | 0.50    
  3    | 000123454321 |  Cake    | 0.45     | 0.90    


Alternates_Table

ALT_PK | INV_FK | ALT_ScanCode
  1    |   2    | 000999888777
  2    |   2    | 000666555444
  3    |   2    | 000333222111

ここで、データベース内のすべてのスキャン コードのリストが必要だとします。テーブルを結合して次の出力を取得するにはどうすればよいですか。

ScanCode     | Name    | Cost | Retail
000123456789 | Muffins | 0.15 | 0.30
000987654321 | Cookie  | 0.25 | 0.50 
000999888777 | Cookie  | 0.25 | 0.50
000666555444 | Cookie  | 0.25 | 0.50
000333222111 | Cookie  | 0.25 | 0.50
000123454321 | Cake    | 0.45 | 0.90 

SQL フィドル

4

3 に答える 3

1
SELECT it.INV_ScanCode, it.INV_Name, it.INV_Cost, it.INV_Retail 
FROM   Inventory_Table AS it

union all

SELECT at.ALT_ScanCode, it.INV_Name, it.INV_Cost, it.INV_Retail 
FROM   Alternate_Table AS at
inner join Inventory_Table AS it on at.INV_FK = it.INV_PK

SQL フィドル

于 2013-10-20T19:29:00.647 に答える
1

あなたが探しているのはunion

SELECT it.INV_ScanCode, it.INV_Name, it.INV_Cost, it.INV_Retail 
FROM   Inventory_Table AS it
UNION ALL
SELECT at.ALT_ScanCode, it.INV_Name, it.INV_Cost, it.INV_Retail 
FROM   Inventory_Table AS it
  INNER JOIN Alternate_Table AS at
  ON at.INV_FK = INV_PK

UNION ALL2 つの結果セット間で行が繰り返されないことがわかっている場合は、より高速な選択です (したがって、DB は重複をチェックする必要がありません)。

于 2013-10-20T19:29:09.457 に答える
0

クエリを理解しているので、在庫テーブルからすべてを取得する必要があります。inventory_table次に、 と の両方を使用して、すべての代替を選択する必要がありますalternates_tableunion allこれは、クエリ全体に対して次のことを示唆しています。

select scancode, name, cost, retail
from inventory_table i
union all
select a.scancode, i.name, i.cost, i.retail
from inventory_table i join
     alternates_table a
     on a.inv_fk = i.inv_pk
于 2013-10-20T19:30:18.540 に答える