mysql выбирает несколько запросов и присоединяется к ним

#mysql #sql #select #join

#mysql #sql #выберите #Присоединиться

Вопрос:

У меня здесь сложный MYSQL вопрос с запросом. Я изо всех сил пытаюсь объяснить свою проблему.

У меня есть 4 таблицы. mid — это внешний ключ между таблицами. table4 НЕ является обязательным источником таблицы. Однако мне нравится, что он возвращает все строки, даже если нет совпадающих данных из table4. Итак, я пишу сценарий запроса следующим образом.

Я не уверен, что это логический способ написания такого сценария запроса, но я знаю, что синтаксис неправильный.

 SELECT * 
FROM table1, table2, table3, 
    (SELECT xx 
    FROM table4 
    RIGHT JOIN table1 ON table1.mid = table4.mid) 
WHERE table1.mid = table2.mid 
AND table1.mid = table3.mid 
AND tt = 'a' 
AND type = 1 
GROUP BY table1.mid 
ORDER BY xx DESC, table1.name ASC;
  

Ответ №1:

Вы должны выполнить левое соединение между таблицами table1 и table4:

 SELECT * 
  FROM table1
  JOIN table2 ON table1.mid = table2.mid 
  JOIN table3 ON table1.mid = table3.mid 
  LEFT JOIN table4 ON table1.mid = table4.mid 
 WHERE tt = 'a' 
   AND type = 1 
 GROUP BY table1.mid 
 ORDER BY xx DESC, table1.name ASC;
  

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

1. Это очаровательная работа. Спасибо эксперту!! 🙂 Но единственный ли это способ?

2. Для ваших нужд это способ сделать это (стандартный и самый простой способ). Конечно, есть другие способы, более сложные, но неинтересные, когда у вас есть LEFT JOIN .