Проблема MySQL с объединением таблицы с двумя столбцами против одного

#php #mysql #join

#php #mysql #Присоединиться

Вопрос:

У меня есть таблица контактов со столбцами id, first, last и identification. Пытаюсь отобразить имена в большем объединении. Я не могу заставить его отображаться при объединении обоих столбцов.

Таблицы:

Идентификатор проверки Order_Id Inspector_Id

Идентификатор контактов First_Name Last_Name Инспектор заказа

Это мой ВЫБОР:

 $sql = " SELECT 
        Inspections.Id,     
        Inspections.Orderer_Id,
        Inspections.Inspector_Id,   
        Contacts.Id 
        Contacts.First_Name AS OFirst,
        Contacts.Last_Name AS OLast,
        Contacts.First_Name AS IFirst,
        Contacts.Last_Name AS ILast,

FROM Inspections
JOIN Contacts ON Inspections.Orderer_Id amp;amp;         Inspections.Inspector_Id=Contacts.Id
WHERE
                Inspections.Id = " . $trigger . ";";
  

Это всего лишь последняя попытка. Я перепробовал множество способов их объединения, но, думаю, мне просто сложно перевести код, который я нашел во время поиска. Любая помощь была бы высоко оценена!

Комментарии:

1. Являются ли значения во всех трех столбцах одинаковыми? Вам нужно было бы указать два отдельных выражения. Как в Inspections.orderer_id = Contacts.id AND inspections.inspector_id=contacts.id . Но если это тот случай, который вы хотите, я бы предложил объединить только 1 и сравнить Inspections.orderer_id = Inspections.inspector_id в предложении where.

2. Ваше условие объединения имеет недопустимый синтаксис: Inspections.Orderer_Id это не логическое выражение, я полагаю, вы имели в виду Inspections.Orderer_Id =Contacts.Id . Также amp;amp; недопустимый SQL, вам нужно использовать AND

3. @jmoerdyk хотя AND является традиционным для SQL, mysql допускает выражения amp;amp; и || в. руководство

4. Извините, так долго работал с MSSQL, мой MySQL заржавел: P

5. Оба значения в Orderer_Id и Inspector_Id указывают на Contacts.Id.

Ответ №1:

Ваш текущий запрос будет работать только (после устранения синтаксических ошибок), если инспектор и Исполнитель заказа — одно и то же лицо, если это не так, вам придется дважды присоединиться к контактам, используя псевдонимы таблиц:

  SELECT 
        Inspections.Id,     
        Inspections.Orderer_Id,
        Inspections.Inspector_Id,   
        orderer.Id AS OId,
        orderer.First_Name AS OFirst,
        orderer.Last_Name AS OLast,
        inspector.Id AS IId,
        inspector.First_Name AS IFirst,
        inspector.Last_Name AS ILast    
FROM Inspections
JOIN Contacts AS orderer ON Inspections.Orderer_Id = orderer.Id
JOIN Contacts AS inspector ON Inspections.Inspector_Id = inspector.Id
WHERE Inspections.Id = xxxx
  

Комментарии:

1. Хорошо, я понимаю, к чему вы здесь клоните. Я попытался ввести напрямую, и ничего не вышло, но у меня есть вопрос. Как / где вы объявляете, что заказчик. Идентификатор на самом деле является контактами. Идентификатор? То же самое для инспектора. Я вижу, что это должны быть псевдонимы таблиц, но не уверен, как это установить. Я продолжу поиск в Интернете и поиграю с вашим примером. Спасибо за вашу постоянную помощь!

2. Неважно! Я пропустил добавление «,» после ILast. (У меня есть дополнительные варианты выбора после. Это сработало отлично. МИЛЛИОН БЛАГОДАРНОСТЕЙ! У меня недостаточно репутации, чтобы отметить как ответивший, но вы справились с этим.

3. В условии объединения вы устанавливаете псевдоним в запросе после имени таблицы. Я обновил запрос, чтобы сделать его более понятным, имя после AS задает псевдоним для таблицы перед AS . Большинство SQL-серверов позволяют вам опускать AS ключевое слово.