MYSQL объединение по нескольким критериям не работает

0

У меня есть запрос, который использует 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

  • 0
    Псевдонимы x и y не определены, поэтому это условие не должно работать.
Показать ещё 2 комментария
Теги:
join

2 ответа

0

Во-первых, давайте убедитесь, что вы понимаете, что такое 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". Полностью неясен данный контекст, но, надеюсь, приведенное выше разъяснение поможет вам решить ваш запрос. Если нет, обновите его более подробно и уточните, что вы пытаетесь выбраться из него.

0

Ваши критерии AND... должны находиться в части запроса WHERE.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню