1

私は2つのテーブルを持っています。1つのテーブルは次のようになります

ORDER_ID | SHOPPER_NAME | DATE
-------------------------------
001A     | Marianna     | 08/09/2012
002A     | Jason        | 80/08/2012

注文に関する情報を持つ別のテーブル

ORDER_ID | DATA_CODE   | DATA_VALUE
----------------------------------
001A     | MILK_MONEY  | 1.20
001A     | NUM_EGGS    | 22
002A     | TOTAL_SPENT | 32.43
001A     | TOTAL_SPENT | 42.13

特定の注文のデータ コードをいくつか取得する必要があります。SHOPPER_NAME、MILK_MONEY (DATA_VALUE where DATA_CODE = 'MILK_MONEY')、TOTAL_SPENT、NUM_EGGS を 1 行で選択するにはどうすればよいですか? 私は3つの結合を行っている場所で動作しています

SELECT SHOPPER_NAME,
       MILK.DATA_VALUE,
       EGGS.DATA_VALUE,
       TOTAL.DATA_VALUE
FROM GROCERIES G
JOIN ORDER_INFO MILK ON MILK.ORDER_ID=G.ORDER_ID
JOIN ORDER_INFO EGGS ON EGGS.ORDER_ID=G.ORDER_ID
JOIN ORDER_INFO TOTAL ON TOTAL.ORDER_ID=G.ORDER_ID

しかし、これは見苦しくなり始めており、同じテーブルで複数の結合を行うのは正しくないと感じています。これを行うより効率的な方法はありますか?

ありがとうございました!

4

3 に答える 3

0

2番目のテーブルでピボットを使用して、それをいくらか非正規化するか、少し非正規化することでデータベースアーキテクチャを変更することができます。その他の例については、スタックオーバーフローでMySQL PIVOTを検索してください。ただし、次のようになります。

SELECT * FROM 
(SELECT ORDER_ID, DATA_CODE, DATA_VALUE FROM tablename
PIVOT (sum(DATA_VALUE) FOR DATA_CODE IN ([MILK_MONEY], [NUM_EGGS], [TOTAL_SPENT])) pvt
于 2012-08-09T21:05:55.600 に答える
0
SELECT SHOPPER_NAME,
       (select sum(DATA_VALUE) from ORDER_INFO where DATA_CODE  = 'MILK_MONEY' and ORDER_ID = G.ORDER_ID) as 'MilkValue'
       (select sum(DATA_VALUE) from ORDER_INFO where DATA_CODE  = 'NUM_EGGS' and ORDER_ID = G.ORDER_ID) as 'EggsValue'
       (select sum(DATA_VALUE) from ORDER_INFO where DATA_CODE  = 'TOTAL_SPENT' and ORDER_ID = G.ORDER_ID) as 'TotalSpentValue'
FROM GROCERIES G

各合計を取得するために使用subquerysします (1 つの列が複数あるのか、それとも牛乳や卵などの合計があるのか​​はわかりません。その場合は、 を削除しますsum's)。各合計はそれぞれの合計になりますOrder_Id

于 2012-08-09T19:49:02.710 に答える
-1
SELECT g.SHOPPER_NAME, oi.* from GROCERIES g JOIN ORDER_INFO oi on oi.ORDER_ID=G.ORDER_ID
于 2012-08-09T19:48:41.050 に答える