嗨,我正在构建一个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