У меня есть три таблицы: таблица заказов и таблица клиентов и таблица состояния заказа, и в таблице заказов и в таблице клиентов есть Customerid в качестве общего поля, а в order и orderstatus есть order_status_id в качестве общего поля.
В таблице клиентов есть поля имени, фамилии, телефона и адреса электронной почты.
Теперь, если мне нужно искать / выбирать заказы в соответствии с именем и / или фамилией клиента, и / или телефоном, и / или электронной почтой, и / или orderid, то каким должен быть формат mysql для запроса соединения, чтобы я мог объединить все три таблицы получить результаты из таблицы заказов вместе со статусом заказа из таблицы статуса заказа?
3 ответа
Вы можете просто присоединиться к столам. Нет необходимости во внешних соединениях или чем-либо в соответствии с вашим текущим определением данных.
SELECT *
FROM Orders o, customers c, orderstatus s
WHERE o.customerid = c.customerid
AND o.order_status_id = s.order_status_id
AND c.firstname = 'OM'
AND c.LASTNAME = 'The Eternity'
AND o.orderid = 752
AND ...
Ну, я бы начал с ЛЕВОГО СОЕДИНЕНИЯ всех трех таблиц вместе.
Потом; структурируйте свое предложение where, чтобы иметь такую строку для каждого параметра (в основном; применение фильтров только в случае, если параметры предоставлены)
WHERE
(@customerFirstName IS NULL OR @customerFirstName = customers.FirstName)
AND (@customerLastName IS NULL OR @customerLastName = customers.LastName)
etc...
В зависимости от количества ожидаемых записей; или если производительность недостаточна; вы можете подумать о создании табличной переменной для хранения меньшего подмножества данных. (т.е. создайте таблицу #customers; а затем вставьте только тех клиентов, которые соответствуют критериям поиска клиентов. Затем присоедините ее к двум другим вашим таблицам)
Сообщите мне, если я неправильно понял ваш вопрос; или если вам нужны пояснения.
Что-то типа:
SELECT `orders`.* ,
`orderstatus`.`description`,
`customers`.`firstname`, `customers`.`lastname`, `customers`.`phone`,`customers`.`email`
FROM `orders`
LEFT JOIN `customers` ON `customers`.`id`=`orders`.`customerid`
LEFT JOIN `orderstatus` ON `orderstatus`.`orderid`=`orders`.`id`
WHERE `customers`.`lastname`='blogs'
Я не уверен в таблице статуса вашего заказа.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.