不确定如何为2个表编写此连接。以下是一些示例数据:
orders
-----------------------
| order_id | customer |
-----------------------
ABC12345 1
ABC12346 4
ABC12347 3
ABC12348 2
ABC12349 2
ABC12350 3
customers
-----------------------------------
| id | name | email |
-----------------------------------
1 James james@gmail.com
2 Alice alice@hotmail.com
3 Jimbo james@gmail.com
4 Jim james@gmail.com
5 Lucy lucy@yahoo.com
我有一个order_id,我已经知道了。让我们使用表格中的第一个:ABC12345。如您所见,客户ID为1,因此订单由James提供。现在,詹姆斯有时会再次使用不同的名字,但我们知道这是因为他的电子邮件地址。
那么如果我知道他的一个订单号码(ABC12345),如何根据他的电子邮件地址james@gmail.com检索所有James的订单?
编辑不确定我是否已经强调了这一点......詹姆斯已经订购了3次,使用相同的电子邮件地址,但是詹姆斯,吉姆和吉博的名字。我需要使用james@gmail.com作为电子邮件地址的所有订单。
答案 0 :(得分:2)
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'
答案 1 :(得分:0)
您可以使用:
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')
)
答案 2 :(得分:0)
您需要先将订单人员量化到客户表...然后,通过同一封电子邮件获取所有客户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
答案 3 :(得分:-2)
试试这个,因为詹姆斯只有一个订单
SELECT orders.order_id, customers.name, customers.email
FROM orders
INNER JOIN customers ON customers.id = orders.customer
WHERE orders.orer_id = 'ABC12345'
订单ID是一个UNIQUE编号,那么您将不会有两个具有相同ID的订单,为什么要关心客户名称? “每个订单都有客户的ID。”
答案 4 :(得分:-2)
SELECT order_id 来自订单 客户IN在哪里(SELECT客户 来自订单 WHERE order_id ='ABC12345')