【问题标题】:mysql SELECT WHERE and SELECT againmysql SELECT WHERE 并再次选择
【发布时间】:2016-06-06 22:28:34
【问题描述】:

我有两张表 Customers 和 Customer_orders。我正在尝试使用 Customer 表中的 Customer_ID 来选择客户的订单。

SELECT * FROM Customer_orders WHERE Customer_ID = SELECT ID FROM Customers WHERE Customer_name = 'John Doe'

此代码不起作用。我该怎么做?

【问题讨论】:

标签: mysql database


【解决方案1】:

您需要加入这两个表,然后查询您需要的内容。像这样:

SELECT co.* 
FROM Customer_orders co 
INNER JOIN Customers c ON co.Customer_ID = c.ID 
WHERE c.Customer_name = 'John Doe';

【讨论】:

    【解决方案2】:

    另一个答案有点复杂 - 它可能会尝试向您展示可以解决更困难问题的解决方案。

    首先,它从 Customer 表中查询 John Doe 的 ID。 其次,它从 Customer_orders 表中查询 customer_id 等于 ID 的所有列。

    我的解决方案很简单:

    SELECT * FROM Customer_orders WHERE Customer_ID in (SELECT ID FROM Customers WHERE Customer_name = 'John Doe')
    or
    SELECT * FROM Customer_orders WHERE Customer_ID = (SELECT ID FROM Customers WHERE Customer_name = 'John Doe')
    

    一般情况下,ID 是 Customer 表的主键,customer_id 应该是 Customer_orders 的键索引。

    使用键索引的单表查询比使用连接操作的查询快两倍,尤其是当表的行数过多时。

    感谢蒂姆纠正我的语法。我很感激。我的英语不好。

    【讨论】:

    • 你好熊,欢迎来到SO。我建议对您的答案进行编辑以稍微提高其可读性,但它缺少一件事:解释您的答案为何/如何解决问题。 Our help centre 提供一些写好答案的建议;你认为你可以编辑你的帖子以包括对你的查询的一些额外解释吗?
    【解决方案3】:

    您可以使用连接方法(内/左)甚至子查询(但不建议在此问题上使用此方法)

    这里是例子

    内联

    SELECT cust_order.* FROM Customer_orders cust_order, Customers cust WHERE cust_order.Customer_ID  = cust.ID AND  cust.Customer_name = 'John Doe'
    

    左加入

    SELECT cust_order.* FROM Customer_orders cust_order LEFT JOIN Customers cust ON cust_order.Customer_ID  = cust.ID WHERE cust.Customer_name = 'John Doe'
    

    子查询

    SELECT * FROM Customer_orders WHERE Customer_ID   =  (SELECT ID FROM Customers WHERE Customer_name = 'John Doe')
    

    如果您想使用子查询,请确保您在表 Customers 上只有 1 个 ID,或者如果它有超过 1 个 ID,您可以使用“IN”而不是“=”

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2013-01-03
      • 2011-06-28
      • 2014-06-10
      • 1970-01-01
      • 2013-01-03
      • 2020-11-03
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多