【发布时间】: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'
此代码不起作用。我该怎么做?
【问题讨论】:
我有两张表 Customers 和 Customer_orders。我正在尝试使用 Customer 表中的 Customer_ID 来选择客户的订单。
SELECT * FROM Customer_orders WHERE Customer_ID = SELECT ID FROM Customers WHERE Customer_name = 'John Doe'
此代码不起作用。我该怎么做?
【问题讨论】:
您需要加入这两个表,然后查询您需要的内容。像这样:
SELECT co.*
FROM Customer_orders co
INNER JOIN Customers c ON co.Customer_ID = c.ID
WHERE c.Customer_name = 'John Doe';
【讨论】:
另一个答案有点复杂 - 它可能会尝试向您展示可以解决更困难问题的解决方案。
首先,它从 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 的键索引。
使用键索引的单表查询比使用连接操作的查询快两倍,尤其是当表的行数过多时。
感谢蒂姆纠正我的语法。我很感激。我的英语不好。
【讨论】:
您可以使用连接方法(内/左)甚至子查询(但不建议在此问题上使用此方法)
这里是例子
内联
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”而不是“=”
【讨论】: