我正在爲我學校的午餐訂單程序撰寫報告,我做了一個查詢,該查詢給了我需要的結果,但速度非常慢。我正在考慮使用相關的子查詢來加速(來自另一個類似的線程的建議),但無法通過語法錯誤,甚至不知道它是否會完成我想要的。MYSQL加速查詢
涉及的兩個表是Ordered_Items和Ordered_Options有序項目表通常會在有序選項表中有3-4個相關記錄,它們代表學生在訂購午餐時選擇的選項。
一個典型的記錄看起來像這樣
Ordered_Items.Record_Number = 1
Ordered_Items.Name = Pizza
Ordered_Options.Ordered_Items_rn = 1
Ordered_Options.Value = Jane
Ordered_Options.rn = 43
Ordered_Options.Ordered_Items_rn = 1
Ordered_Options.Value = Doe
Ordered_Options.rn = 44
Ordered_Options.Ordered_Items_rn = 1
Ordered_Options.Value = Pepperoni
Ordered_Options.rn = 45
,我想他們都顯示爲報告的目的,從而從查詢的輸出會看起來像一個單個記錄:披薩Jane Doe的辣。 Ordered_Options.rn是一致的,意思是名字總是= 44等等。我已經把我的代碼放在下面。
SELECT
OI.Name AS ItemName,
opt1.`Value` AS StudentFirst,
opt2.`Value` AS StudentLast,
opt3.`Value` AS Grade,
opt4.`Value` AS Milk
FROM
((((
Ordered_Items OI
LEFT JOIN Ordered_Options opt1 ON ((
(OI.record_number = opt1.Ordered_Items_rn)
AND(opt1.Options_rn = 43))))
LEFT JOIN Ordered_Options opt2 ON((
(OI.record_number = opt2.Ordered_Items_rn)
AND(opt2.Options_rn = 44))))
LEFT JOIN Ordered_Options opt3 ON ((
(OI.record_number = opt3.Ordered_Items_rn)
AND(opt3.Options_rn = 46))))
LEFT JOIN Ordered_Options opt4 ON ((
(OI.record_number = opt4.Ordered_Items_rn)
AND(opt4.Options_rn = 55))))
如果您對數據庫有任何控制權,請考慮規範化此設計。學生的名字和姓氏沒有業務是訂購商品的「選項」。 –