У меня есть запрос, который использует LEFT JOIN
с несколькими критериями для извлечения данных. Однако запрос не возвращает никаких данных, когда я использую более одного предложения AND
в условиях.
Например:
LEFT JOIN tblName
on x.ABC=y.ABC
AND x.MNO="AnyValue"
AND x.UserId=1
не возвращает никаких данных.
Однако, когда я LEFT JOIN tblName on x.ABC=y.ABC AND x.MNO="AnyValue"
последнее предложение AND
(т.е. LEFT JOIN tblName on x.ABC=y.ABC AND x.MNO="AnyValue"
), это дает мне неправильный результат. Но да, это вернет некоторые данные.
Дайте мне знать, как добавить несколько условий для работы запроса.
Я хочу получить результаты, используя первое условие, то есть LEFT JOIN tblName on x.ABC=y.ABC AND x.MNO="AnyValue" AND x.UserId=1
Во-первых, давайте убедитесь, что вы понимаете, что такое LEFT JOIN. Подумайте об этом так. Левая сторона - это то, как я думаю в последовательном порядке предложения FROM. Вы читаете слева направо, так что первая таблица - это моя ЛЕВАЯ сторона, которую я ВСЕГДА хочу. Правая сторона (следующая таблица в запросе) является необязательной, но если она существует, отлично, у меня больше деталей.
Так что возьмите сценарий людей и приказов. Я хочу список всех людей. Но если у них порядок, это еще лучше.
select
P.LastName,
O.OrderID,
O.OrderDate
from
People P
LEFT JOIN Order O
on P.PersonID = O.PersonID
Это сделает именно это. Покажите всем людям и ЕСЛИ у них есть заказ, который приходит на прогулку. Если у них есть несколько заказов, он будет показывать строку для ВСЕХ заказов, которые у них были.
Теперь добавьте критерии к следующей таблице. Допустим, я только хотел показать заказы с 2018 года. Это станет частью предложения LEFT JOIN "ON", потому что я только забочусь о части заказов.
LEFT JOIN Order O
on P.PersonID = O.PersonID
AND O.OrderDate >= '2018-01-01'
Я все равно получаю ВСЕ людей, но только информация о заказе будет отображаться для тех, у кого дата заказа включена/после 1 января 2018 года.
Теперь, если вы заботитесь только о ТОЛЬКО ЛЮДЯХ, КОТОРЫЕ ЗАВЕРШИЛИ ЗАКАЗЫ, и заказы были включены после 2018 года, это в основном устранило бы необходимость ЛЕВЫЙ ВСТУПИТЕЛЬ и стал стандартным (INNER) JOIN
JOIN Order O
on P.PersonID = O.PersonID
AND O.OrderDate >= '2018-01-01'
ПРИСОЕДИНИТЕСЬ Подразумевает, что запись в боковой таблице ORDER ДОЛЖНА быть найдена
Таким образом, в вашем сценарии, где ваше имя псевдонима "x" и "y". Полностью неясен данный контекст, но, надеюсь, приведенное выше разъяснение поможет вам решить ваш запрос. Если нет, обновите его более подробно и уточните, что вы пытаетесь выбраться из него.
Ваши критерии AND...
должны находиться в части запроса WHERE
.
x
иy
не определены, поэтому это условие не должно работать.