SQL EXISTS返回所有行,多于两个表
我知道以前也有人问过类似的问题,但我在两张以上的表格中都没有看到。这似乎是有区别的 我有三个表,我需要字段,SQL EXISTS返回所有行,多于两个表,sql,subquery,exists,correlated-subquery,Sql,Subquery,Exists,Correlated Subquery,我知道以前也有人问过类似的问题,但我在两张以上的表格中都没有看到。这似乎是有区别的 我有三个表,我需要字段,customers我需要customerID和orderID从中,orders我从中获得customerID和orderID和数量(=订购数量) 我想了解有多少客户购买了2件以上的相同商品,因此基本上数量>2,包括: SELECT COUNT(DISTINCT custID) FROM customers WHERE EXISTS( SELECT * FROM custo
customers
我需要customerID
和orderID
从中,orders
我从中获得customerID
和orderID
和数量(=订购数量)
我想了解有多少客户购买了2件以上的相同商品,因此基本上数量>2,包括:
SELECT COUNT(DISTINCT custID)
FROM customers
WHERE EXISTS(
SELECT *
FROM customers C, orders O, lineitems L
WHERE C.custID = O.custID AND O.orderID = L.orderID AND L.quantity > 2
);
我不明白为什么它会返回所有行的计数。我在检查>2条件之前关联子查询,不是吗
我是SQL的初学者,所以如果您能在必要时从根本上向我解释一下,我将不胜感激。谢谢。您不必重复EXISTS
子查询中的customers
表。这就是关联的概念:使用外部查询的表来关联
SELECT COUNT(DISTINCT custID)
FROM customers c
WHERE EXISTS(
SELECT *
FROM orders O
JOIN lineitems L ON O.orderID = L.orderID
WHERE C.custID = O.custID AND L.quantity > 2
);
您不必在EXISTS
子查询中重复customers
表。这就是关联的概念:使用外部查询的表来关联
SELECT COUNT(DISTINCT custID)
FROM customers c
WHERE EXISTS(
SELECT *
FROM orders O
JOIN lineitems L ON O.orderID = L.orderID
WHERE C.custID = O.custID AND L.quantity > 2
);
我将把这看作两个聚合:
select count(distinct customerid)
from (select o.customerid, l.itemid, count(*) as cnt
from lineitems li join
orders o
on o.orderID = l.orderId
group by o.customerid, l.itemid
) ol
where cnt >= 2;
内部查询统计每个客户已购买的商品数量。外部统计客户数量
编辑:
对于上述答案,我可能误解了这个问题。如果您只想要数量>=2
,那么这就容易多了:
select count(distinct o.customerid)
from lineitems li join
orders o
on o.orderID = l.orderId
where l.quantity >= 2;
这可能是表达查询的最简单方式。我将其作为两个聚合:
select count(distinct customerid)
from (select o.customerid, l.itemid, count(*) as cnt
from lineitems li join
orders o
on o.orderID = l.orderId
group by o.customerid, l.itemid
) ol
where cnt >= 2;
内部查询统计每个客户已购买的商品数量。外部统计客户数量
编辑:
对于上述答案,我可能误解了这个问题。如果您只想要数量>=2
,那么这就容易多了:
select count(distinct o.customerid)
from lineitems li join
orders o
on o.orderID = l.orderId
where l.quantity >= 2;
这可能是表达查询的最简单方式。我建议您使用“连接”
试试这个
挑选
计数(*)
从…起
命令
内连接
行项目l
在…上
l、 orderID=o.orderID
哪里
l、 数量>2我建议您使用“连接”
试试这个
挑选
计数(*)
从…起
命令
内连接
行项目l
在…上
l、 orderID=o.orderID
哪里
l、 数量>2那么该错误是由于再次重复客户而导致的?或者使用JOIN
而不是FROM。。。其中…
在使用多个表时也会产生影响?@sandboxj是的错误是由于表客户
再次被使用:这超出了相关性的概念。最好使用现代的JOIN
语法,如上面的查询中所示,而不是使用逗号分隔表的旧式语法?或者使用JOIN
而不是FROM。。。其中…
在使用多个表时也会产生影响?@sandboxj是的错误是由于表客户
再次被使用:这超出了相关性的概念。最好使用现代的JOIN
语法,如上面的查询,而不是使用逗号分隔表的旧式语法。