Sql 如何将嵌套选择表示为更简单的联接
我有三张桌子:Sql 如何将嵌套选择表示为更简单的联接,sql,join,Sql,Join,我有三张桌子: customers: id, name transactions: id_customer, id_item items: id, name 我想编写一个简单的查询,返回订购了名为“apple”的商品的所有客户的姓名 我知道我可以做一些事情,比如: SELECT name FROM customers WHERE id IN (SELECT id_customer
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'))
这可能不太糟糕,但似乎很复杂,可能有一种更直接的方法可以使用联接来实现这一点?是的,在这种情况下使用联接肯定更好。试试这个:
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'
这样,只有下了包含“苹果”的订单的客户才会显示。使用Join case,这是最好的方法
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"
上述查询将返回订购“苹果”的所有客户的姓名 您需要
不同的。正确。谢谢,太好了。这两个查询之间有性能差异吗?我想你的方式更快,但我不知道为什么。特别是如果表之间的关系是用外键显式声明的。这样,DBMS将只检查匹配的键,而不是先扫描整个表以满足嵌套的SELECT
s。首先计算哪个内部联接?谢谢。我认为,正如吉吉桑的回答一样,应该有一个明确的答案