MySQL查询 - 加入查询
不知道如何为2个表编写此连接。下面是一些示例数据来说明:MySQL查询 - 加入查询
orders
-----------------------
| order_id | customer |
-----------------------
ABC12345 1
ABC12346 4
ABC12347 3
ABC12348 2
ABC12349 2
ABC12350 3
customers
-----------------------------------
| id | name | email |
-----------------------------------
1 James [email protected]
2 Alice [email protected]
3 Jimbo [email protected]
4 Jim [email protected]
5 Lucy [email protected]
我有一个order_id,我已经知道了。我们使用表格中的第一个:ABC12345。正如你所看到的,客户ID是1,所以这个命令是由James发出的。现在有时詹姆斯再次用不同的名字命令,但我们知道这是他的电子邮件地址。
那么,如果我知道他的订单号码(ABC12345)之一,那么如何根据他的电子邮件地址[email protected]检索James的所有订单?
编辑:不知道我是否强调这一点......詹姆斯已经订购了3次,使用相同的电子邮件地址,但詹姆斯,吉姆和Jimbo的名字。我需要使用[email protected]作为电子邮件地址。
SELECT o2.order_id
FROM orders o1
INNER JOIN customers c1
ON o1.customer = c1.id -- get the customer for the first order
INNER JOIN customers c2
ON c1.email = c2.email -- find all customers with same email
INNER JOIN orders o2
ON c2.id = o2.customer -- find all orders for those customers
WHERE o1.order_id = 'ABC12345'
您可以使用此:
SELECT order_id
FROM orders
WHERE customer IN (
SELECT id
FROM customers
WHERE email = (SELECT c.email FROM customers c JOIN orders o ON c.id = o.customer WHERE o.order_id = 'ABC12345')
)
该OP问一个问题如何检索这个数据“_如果我知道他的一个订单号(ABC12345)_”。你的回答根本没有帮助。 – Tadeck
已更新的答案。 –
试试这个,因为詹姆斯只有一个为了
SELECT orders.order_id, customers.name, customers.email
FROM orders
INNER JOIN customers ON customers.id = orders.customer
WHERE orders.orer_id = 'ABC12345'
订单ID是一个唯一的号码,那么你不会有两个命令使用相同的ID ,为什么关心客户的名字? “每个订单都会有一个客户ID。”
SELECT ORDER_ID 从接单 如果客户IN(SELECT客户 从接单 WHERE ORDER_ID = 'ABC12345')
我需要查询才能根据电子邮件地址获取所有客户的订单。 – BadHorsie
您需要订单的人第一次量化到客户表..然后,通过同一封电子邮件获取所有客户ID ...然后获取符合这些客户ID的订单。
select o2.*
from orders o2
JOIN (select c2.ID
from customers c2
join (select c1.email
from orders o
join customers c1
on o.Customer = c1.ID
where
o.order_id = 'ABC12345') FoundTheEmail
on c2.email = FoundTheEmail.email
) as SameCustomerEMail
on o2.Customer = SameCustomerEMail.ID
好的乔,比我的版本更干净,但我想知道两者之间的性能差异:) – DRapp
我认为只需一次连接就足够了。 –