三个表的连接查询!!对于下面给出的条件

时间:2010-06-25 11:51:41

标签: mysql join

我有三个表Orders表和customers表和orderstatus表,order和customer表都有customerid作为公共字段,order和orderstatus有order_status_id作为公共字段

客户表包含名字,姓氏,电话和电子邮件地址字段。

现在,如果我必须根据客户名字和/或姓氏和/或电话和/或电子邮件和/或orderid搜索/选择订单,那么什么应该是加入查询的mysql格式,以便我可以将所有从orderstatus表中获取订单表和orderstatus的结果的三个表?

3 个答案:

答案 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'

我不确定你的订单状态表。