#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
.