Вот мой код:

SELECT *
FROM (`View_Products_With_Category`)
WHERE `category_id` =  '47'
AND `top_id` =  0
AND (select count(product_id) from Modules where product_id=`View_Products_With_Category`.id)= 0
ORDER BY `order`, `sub_order`, `code` 

Этот запрос возвращает 8 строк из 15 000 записей. Моя проблема в том, что строка (выберите count (product_id) из модулей, где product_id = View_Products_With_Category. Id) = 0 работает так медленно.

Мне нужен синтаксис, чтобы медленная линия работала, если первое условие ИСТИНА.

Это возможно?

2
fobus 26 Дек 2013 в 13:21

2 ответа

Лучший ответ

Вы можете использовать LEFT JOIN

Попробуй это:

SELECT V.*
FROM View_Products_With_Category V
LEFT JOIN Modules M ON V.id = M.product_id
WHERE V.category_id =  '47' AND V.top_id =  0 AND M.product_id IS NULL
ORDER BY V.order, V.sub_order, V.code
2
Saharsh Shah 26 Дек 2013 в 09:25

Используйте left join и проверьте, работает ли соединение с is null.

SELECT v.*
FROM `View_Products_With_Category` v
LEFT JOIN modules ON m.product_id= v.id
WHERE v.`category_id` =  '47'
AND v.`top_id` =  0
AND m.product_id IS NULL
ORDER BY v.`order`, v.`sub_order`, v.`code` 

См. это прекрасное объяснение объединений

2
juergen d 26 Дек 2013 в 09:24