gpt4 book ai didi

SQL - 跨列比较属性

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

我有以下表格

customers(custid, name)
orders(orderid, custid)
itemsordered(itemid, orderid)
items(itemid, description)

我的目标是为每对订购具有相同描述的商品的客户检索这两个客户的姓名。消除重复项,不要将客户与他们自己配对,并且每对只包含一次。对于每一对,按字母顺序返回对中的名称。

我知道我需要引用两个 custid 并将他们的描述相互比较,例如:

select nameA
from customers nameA
join orders using (custid)
join itemsordered using (orderid)
join item using (itemid)
where (select nameB
from customers
from customers nameA
join orders using (custid)
join itemsordered using (orderid)
join item using (itemid)
where descriptionA = descriptionB

etc.

但不确定如何进行。以下是正确的回应:

Christina|Janine
Christina|Max
Christina|Teddy
Christina|David
Christina|Rachel
Rachel|Teddy
David|Janine
David|Rachel
David|Teddy
Janine|Rachel
Janine|Teddy
Janine|Max
Max|Teddy

我需要一些新的例子。我的大部分猜测都包含如下子查询:

select attribute from table
join anotherTable using (somekey)
where table in (select anotherAttribute
from anotherTable
where....etc.

如有任何建议或指示,我们将不胜感激。

更新:名称是唯一的。

最佳答案

WITH t AS (
SELECT DISTINCT c.name, i.description -- collapse dupes per name
FROM customers c
JOIN orders USING (custid)
JOIN itemsordered USING (orderid)
JOIN items i USING (itemid)
)
SELECT DISTINCT t.name, t1.name
FROM t
JOIN t t1 USING (description)
WHERE t.name < t1.name -- rules out self-joins and duplicate pairs
ORDER BY 1, 2;

这与@Clodoaldo 发布的内容类似,除了几个重要的区别。

  • 假设唯一的名字。否则结果将没有意义。更简单的外部 SELECT.
    如果名称不唯一,则需要输出 custid(另外)。

  • 根据问题匹配描述

  • 立即折叠每个客户的重复描述。只有少数人被骗,这无济于事。有多个它可以提高性能。

关于SQL - 跨列比较属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766667/

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