如何将嵌套的SELECTS表示为更简单的JOIN

时间:2016-08-05 06:32:23

标签: sql join

我有三张桌子:

customers:    id,          name
transactions: id_customer, id_item
items:        id,          name

我想写一个简单的查询,它将返回订购商品名称为'apple'的所有客户的名字

我知道我可以这样做:

SELECT
  name
FROM
  customers
WHERE id IN (SELECT
               id_customer
             FROM
               transactions
             WHERE id_item IN (SELECT
                                 id
                               FROM
                                 items
                               WHERE name = 'apple'))

这可能不是太糟糕,但似乎有点费解,并且可能有一种更直接的方式来加入这个?

2 个答案:

答案 0 :(得分:2)

是的,在这种情况下使用联接肯定更好。试试这个:

SELECT DISTINCT
    A.name
FROM 
    customers A INNER JOIN
    transactions B ON A.id = B.id_customer INNER JOIN
    items C ON B.id_item = C.id
WHERE C.name = 'apple'

通过这种方式,只会显示下达包含'apple'的订单的客户。

答案 1 :(得分:0)

使用Join案例,这是一种最好的方法。

Select C.name from Customers C 
Inner Join Transaction T on C.id = T.id_customer 
Inner Join Items I on T.id_items = I.id
where I.name = "Apple"

以上查询将返回订购“Apple”的所有客户的姓名。