有没有一种方法可以不使用联接来回答这个问题?
编写一个查询,为每个客户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;
有没有办法不使用连接函数来解决这个问题?谢谢你的时间和考虑。
我想不出一种没有任何连接的方法来完成这件事。您可以使用交叉连接
和exists
在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中不支持嵌套的相关子句。因此,即使接受交叉连接
,这在MySQL中也不起作用。
join
似乎有必要的原因是要在结果集中获得两个独立的客户ID。
问题内容: 我有4个不同的表要加入。这些表的结构如下: 从表A开始,我了解如何使用b联接表a和c,因为b具有这些表的主键。我也希望能够在TableA上加入表TableD。下面是我的SQL语句,该语句首先连接表A和B,然后将其连接到C: 当我尝试添加另一个联接以包括D时,出现“ TableD”未知的错误: 问题答案: 您想要更多类似这样的东西: 在您的示例中,您实际上并未包含。您要做的就是像以前一样
问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广
我有这个存储过程。我的问题是当记录不存在于机构表是不返回任何东西。我想说即使没有记录在机构仍然返回,所以我已经添加了左外JOIN机构和_Agency=IsNull(U._Agency,")在顶部。但仍然不返回值。它是返回值时,我采取A._IsActive=1在最后一行出来。我该怎么办id A._IsActive没有值仍然返回。我尝试了相同的ISNull但不工作。
我试图连接4个表,其中一个表没有所有匹配的ID,但我仍然需要显示连接的结果,甚至对于没有相应ID的行。 下面是我所说的一个例子: 示例查询: 所以基本上我要做的是,如果tbl4没有tbl1_id,我仍然希望看到来自table1的结果,但为cnt显示0值...当我运行这个查询时,我得到了一堆重复的条目,数据看起来不正确。
问题内容: 嗨,我目前有3个表格,如下所示。表之间没有通用键 表1-> linkage_Table 表2->材料表 表格3-> Color_Table 我希望得到以下结果集 我想编写一条SQL语句将表连接在一起。 链接表中带有*表示我们将从材料或颜色表中检索所有值。 我现在确实需要此解决方案。一直试图解决这个问题超过5个小时。在此先感谢您的帮助。 问题答案: 一种可能的方法: SQL小提琴 说明:
写一个函数均衡器(w1,w2),它包含两个不同长度的单词w1和w2。函数应该返回重复的较小单词,直到它达到长单词的长度