gpt4 book ai didi

mysql - 如何回答使用没有连接的多个表的问题?数据库

转载 作者:行者123 更新时间:2023-11-30 21:25:48 25 4
gpt4 key购买 nike

有没有不使用连接就可以回答这个问题的方法?

编写一个查询,为每个客户 X 查找至少订购了一个与 X 相同的产品的另一个客户 Y。查找所有此类客户对 (X, Y),并针对每一对查找重叠产品的数量.因此查询应该有三列。按重叠产品的数量对结果进行排序。

问题使用了 https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all数据库。

使用联接,我可以这样回答问题:

O2.CustomerID AS Cust2,
COUNT(*) AS OverlappingProd
FROM (SELECT O.CustomerID, OD.ProductID
FROM Orders AS O
JOIN OrderDetails AS OD
ON OD.orderid = o.orderid) AS O1
JOIN(SELECT O.CustomerID, OD.ProductID
FROM Orders AS O
JOIN OrderDetails AS OD
ON OD.orderid = o.orderid) AS O2
ON O2.ProductID = O1.ProductID
AND O2.CustomerID > O1.CustomerID
GROUP BY
O1.CustomerID,
O2.CustomerID
ORDER BY COUNT(*) DESC;

有没有办法不使用 JOIN 函数来回答这个问题?感谢您的时间和考虑。

最佳答案

我想不出没有任何联接的方法。您可以使用 cross joinexists 在 SQL 中表达这一点,因此以下内容很接近:

select c1.customerid, c2.customerid,
(select count(*)
from products p
where exists (select 1
from orderdetails od
where od.productid = p.productid and
exists (select 1
from orders o
where o.orderid = od.orderid and
o.customerid = c1.customerid
)
) and
exists (select 1
from orderdetails od
where od.productid = p.productid and
exists (select 1
from orders o
where o.orderid = od.orderid and
o.customerid = c2.customerid
)
)
) as num_products
from customers c1 cross join
customers c2
where c1.customerid < c2.customerid;

尽管此语法适用于许多数据库,但 MySQL 不支持嵌套相关子句。因此,即使接受 CROSS JOIN,这在 MySQL 中也不起作用。

之所以需要 JOIN,是因为要在结果集中获得两个独立的客户 ID。

关于mysql - 如何回答使用没有连接的多个表的问题?数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59130963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com