вот мой запрос, который не работает
SELECT p.pID
FROM CommunityStoreProducts p
JOIN CommunityStoreProductAttributeValues pav
ON p.pID = pav.PID
WHERE (
(pav.akID = 62)
AND (pav.avID = 12313)
)
AND (
(pav.akID = 64)
AND (pav.avID = 12315)
)
AND (
(pav.akID = 65)
AND (pav.avID = 12316)
)
и я также попытался погрузиться в запрос следующим образом:
SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 62) AND (pav.avID = 12313)
SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 64) AND (pav.avID = 12315)
SELECT p.pID FROM CommunityStoreProducts p INNER JOIN CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE (pav.akID = 65) AND (pav.avID = 12316)
все 3 запроса работают хорошо и возвращают значение. когда мы присоединяем этот 3 к 1 запросу, который не работает.
FYI: 1 продукт, удовлетворяющий всем 3 условиям
есть ли какие-либо ошибки в первом запросе?
Благодарю.
Я не вижу никаких синтаксических ошибок в отношении этого запроса, однако он не вернет никакого значения. Не может быть записи, которая имеет akID
равную 62, 64 и 65 одновременно. Если вы хотите вернуть все такие записи, используйте оператор OR
:
SELECT p.pID FROM CommunityStoreProducts p
INNER JOIN CommunityStoreProductAttributeValues pav
ON p.pID = pav.PID
WHERE pav.akID = 62 AND pav.avID = 12313
OR pav.akID = 64 AND pav.avID = 12315
OR pav.akID = 65 AND pav.avID = 12316
Если вам нужно использовать несколько "ИЛИ", вы можете заменить их на "IN".
SELECT p.pID FROM CommunityStoreProducts p INNER JOIN
CommunityStoreProductAttributeValues pav ON p.pID = pav.PID WHERE
((pav.akID = 62) AND (pav.avID = 12313))
OR
((pav.akID = 64) AND (pav.avID = 12315))
OR
((pav.akID = 65) AND (pav.avID = 12316))
Всякий раз, когда вы выполняете операцию в одном поле с несколькими условиями, используйте OR вместо AND.
Я работаю с очень сложным фильтром продукта, поэтому я не могу использовать оператор "IN" или "OR". Теперь я изменил запрос как это, он работает для меня
SELECT p.pID FROM CommunityStoreProducts p
INNER JOIN CommunityStoreProductAttributeValues pav620 ON p.pID = pav620.PID
INNER JOIN CommunityStoreProductAttributeValues pav640 ON p.pID = pav640.PID
INNER JOIN CommunityStoreProductAttributeValues pav650 ON p.pID = pav650.PID
WHERE ((pav620.akID = 62) AND (pav620.avID = 12313))
AND ((pav640.akID = 64) AND (pav640.avID = 12315))
AND ((pav650.akID = 65) AND (pav650.avID = 12316))
я не знаю, правильно это или нет, но это сработало для меня. Спасибо, ребята, за ваш ответ