【问题标题】:A join query for three tables!! for the given condtion below三个表的连接查询!!对于下面的给定条件
【发布时间】:2011-03-08 06:12:50
【问题描述】:

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

客户表有名字、姓氏、电话和电子邮件地址字段。

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

【问题讨论】:

  • 你的问题让我很兴奋! ;-)
  • 你看那叫营销/广告/活动
  • 我点击标题只是想看看这里有没有超级好玩的东西(小丑?马戏团?)。猜不到。
  • 为此你必须去 meta.stackoverflow.com 并要求他们在编辑器中提供新功能,以便我们可以放一些你最喜欢的(小丑?马戏团?)
  • 它仍然无法正常工作.. 根据解决方案,所以我最好考虑删除它,因为这可能会导致您的负面标记

标签: mysql join


【解决方案1】:

您可以加入表格。根据您当前的数据定义,不需要外部连接或任何东西。

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

【讨论】:

    【解决方案2】:

    好吧,我将从 LEFT JOINING 所有三个表一起开始。

    然后;构造你的 where 子句,让每个参数都有这样的一行(基本上;仅在提供参数的情况下应用过滤器)

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

    取决于您期望的记录数;或者缺乏表现;您可能需要考虑创建一个表变量来保存较小的数据子集。 (即创建一个#customers 表;然后只插入符合客户搜索条件的客户。然后将其加入您的其他两个表)

    如果我误解了您的问题,请告诉我;或者如果您需要任何说明。

    【讨论】:

    • 是的,我需要您对我的问题的理解?根据上述给定条件,我需要订单表中的数据和 orderstatus 表中的订单状态
    • 嗯;不确定我是否遵循;但是如果你将所有三个表连接在一起;您可以在 select 子句中包含订单表和订单状态表中的数据。
    【解决方案3】:

    类似:

    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'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2018-09-10
      • 2012-05-02
      • 2015-09-23
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多