我有三个表Orders表和customers表和orderstatus表,order和customer表都有customerid作为公共字段,order和orderstatus有order_status_id作为公共字段
客户表包含名字,姓氏,电话和电子邮件地址字段。
现在,如果我必须根据客户名字和/或姓氏和/或电话和/或电子邮件和/或orderid搜索/选择订单,那么什么应该是加入查询的mysql格式,以便我可以将所有从orderstatus表中获取订单表和orderstatus的结果的三个表?
答案 0 :(得分:2)
您可以加入表格。根据您当前的数据定义,无需外连接或其他任何内容。
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 :(得分:1)
好吧,我会先从LEFT JOINING这三张桌子开始。
然后;构造你的where子句为每个参数设置一条这样的行(基本上;只在提供参数的情况下应用过滤器)
WHERE
(@customerFirstName IS NULL OR @customerFirstName = customers.FirstName)
AND (@customerLastName IS NULL OR @customerLastName = customers.LastName)
etc...
取决于您期望的记录数量;或者如果缺乏表现;您可能想要考虑创建一个表变量来保存较小的数据子集。 (即创建一个#customers表;然后只插入符合客户搜索条件的客户。然后将其加入到其他两个表中)
如果我误解了你的问题,请告诉我。或者如果你想要任何澄清。
答案 2 :(得分:1)
类似的东西:
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'
我不确定你的订单状态表。