嗨,我正在構建一個Java程序,我需要管理一些項目。爲了做到這一點,我需要過濾項目。我通過構建SQL查詢並執行它來過濾項目。我需要以下查詢首先排序 (LEFT JOIN (SELECT * FROM grupe ORDER BY grupe.pavadinimas DESC)grupe ON
) 並且只有然後添加所有其他數據並執行WHERE子句。MySQL按優先順序排列
SELECT *
FROM (
(
SELECT preke.*
FROM preke_tiekejas
, preke
WHERE preke_tiekejas.tiek_id IN (18610,13604)
AND preke.pr_id=preke_tiekejas.pr_id
GROUP BY
preke_tiekejas.pr_id
) preke
, preke_kaina
, (
SELECT *
FROM preke_info
WHERE preke_info.pavadinimas LIKE '%kait%'
) preke_info
) LEFT JOIN (
SELECT *
FROM grupe
ORDER BY
grupe.pavadinimas DESC
)grupe ON grupe.pgs_id=preke.pgs_id
LEFT JOIN gamintojas ON gamintojas.gam_id=preke.gam_id
LEFT JOIN grupe_darb ON grupe_darb.pgs_id=grupe.pgs_id
WHERE preke_kaina.pr_id=preke.pr_id
AND preke_info.pr_id=preke.pr_id
AND grupe_darb.darb_id = 20
LIMIT 0, 500
如果我刪除這些兩個子查詢:
(SELECT * FROM preke_info WHERE preke_info.pavadinimas LIKE '%kait%')
(SELECT preke.* FROM preke_tiekejas, preke
WHERE preke_tiekejas.tiek_id IN (18610,13604)
AND preke.pr_id=preke_tiekejas.pr_id
GROUP BY preke_tiekejas.pr_id)
那麼查詢的工作就是我想要的。
P.S.命令它只在查詢結束時不是一個選項,因爲有大量的記錄,然後它變得緩慢地獄。
解釋
http://i40.tinypic.com/wirbz6.jpg
@Lieven:
查詢的結果是不相同 - 無極限應爲〜90K行:
查詢結果不一樣 - 迴歸〜50rows:
如果我理解正確,這就是你想要的:http://i44.tinypic.com/ibl64i.jpg – Minutis 2012-03-09 07:40:55
@Minutis - 是的。我已將它添加到您的問題。你能否驗證我的修改後的聲明是否提供了與原始查詢相同的結果? – 2012-03-09 07:53:05
@Minutis - 現在我是閱讀MySQL解釋計劃的外行,但是在我看來,你錯過了'grupe_darb'上的索引。 – 2012-03-09 07:58:46