我有這個需要很長時間執行的SQL查詢。將多個NOT IN轉換爲LEFT JOIN以提高性能
SELECT DISTINCT p.products_id,
p.products_group,
p.products_quantity,
p.products_length,
p.products_price,
p.products_height,
p.products_width,
p.products_weight,
p.products_cost,
p.products_rmb_cost,
p.products_best_rmb,
p.products_status,
p.products_image,
p.products_vendor_code,
p.products_date_added,
pd.products_name
FROM products p,
products_description pd
WHERE p.products_id = pd.products_id
AND p.products_id NOT IN(SELECT related_products_id
FROM products_related
WHERE products_id = '93667')
AND p.products_id NOT IN(SELECT products_id
FROM products_related
WHERE related_products_id = '93667')
AND p.products_group = '300'
AND language_id = 1
AND (((pd.products_name LIKE '%emerald%')
OR p.products_image LIKE '%emerald%'
OR p.products_id LIKE '%emerald%')
AND ((pd.products_name LIKE '%square%')
OR p.products_image LIKE '%square%'
OR p.products_id LIKE '%square%'))
AND pd.products_id != '93667'
ORDER BY p.products_group,
p.products_quantity,
p.products_id
我試圖向2轉換NOT IN部分LEFT JOIN的而不是提高性能,但是我雖然性能確實大幅提高,我得到的結果是不一樣的原始查詢。 關於如何正確修改此查詢以使用LEFT JOIN而不是NOT IN的任何建議?
編輯:
這是我嘗試過,但得到錯誤的結果:
SELECT DISTINCT p.products_id,
p.products_group,
p.products_quantity,
p.products_length,
p.products_price,
p.products_height,
p.products_width,
p.products_weight,
p.products_cost,
p.products_rmb_cost,
p.products_best_rmb,
p.products_status,
p.products_image,
p.products_vendor_code,
p.products_date_added,
pd.products_name
FROM products p,
products_description pd
LEFT JOIN products_related pr
ON pr.products_id = '93667'
AND pr.related_products_id = '93667'
WHERE p.products_id = pd.products_id
AND pr.products_id IS NULL
AND pr.related_products_id IS NULL
AND p.products_group = '300'
AND language_id = 1
AND (((pd.products_name LIKE '%emerald%')
OR p.products_image LIKE '%emerald%'
OR p.products_id LIKE '%emerald%')
AND ((pd.products_name LIKE '%square%')
OR p.products_image LIKE '%square%'
OR p.products_id LIKE '%square%'))
AND pd.products_id != '93667'
ORDER BY p.products_group,
p.products_quantity,
p.products_id
如果產品ID可以是'翡翠',那麼我有一種感覺,你甚至已經開始了你已經失去了 – Strawberry
@Strawberry哈哈...... :) – CreativeMind