Запрос на объединение для трех таблиц !! для данного условия ниже - PullRequest
1 голос
/ 25 июня 2010

У меня есть три таблицы: Таблица заказов, таблица клиентов и таблица статуса заказа, таблица заказов и клиентов имеют обычное поле customerid, а поле заказа и статус заказа имеют общее поле order_status_id

таблица клиентов имеет имя, фамилию, телефони поля адреса электронной почты.

Теперь, если мне придется искать / выбирать заказы по имени и / или фамилии клиента, и / или телефону, и / или электронной почте, и / или адресу, то какой должен быть формат mysql?объединить запрос, чтобы я мог объединить все три таблицы, чтобы получить результаты из таблицы заказов вместе с таблицей заказов из таблицы заказов?

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

Вы можете просто присоединиться к столам.Нет необходимости во внешних соединениях или чем-либо в соответствии с вашим текущим определением данных.

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 ...
1 голос
/ 25 июня 2010

Что-то вроде:

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'

Я не уверен в вашей таблице статуса заказа.

1 голос
/ 25 июня 2010

Ну, я бы начал с ЛЕВОГО СОЕДИНЕНИЯ всех трех таблиц, чтобы начать.

Тогда; структурируйте ваше предложение where так, чтобы в нем была строка, подобная этой, для каждого параметра (в основном; применение фильтров только в том случае, если заданы параметры)

WHERE 
(@customerFirstName IS NULL OR @customerFirstName = customers.FirstName)
AND (@customerLastName IS NULL OR @customerLastName = customers.LastName)
etc...

В зависимости от количества ожидаемых записей; или если производительность не хватает; Вы можете подумать о создании табличной переменной для хранения меньшего подмножества данных. (т.е. создайте таблицу #customers; затем вставьте только тех клиентов, которые соответствуют критериям поиска клиентов. Затем присоедините их к двум другим вашим таблицам)

Дайте мне знать, если я неправильно понял ваш вопрос; или если вы хотите каких-либо разъяснений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...