gpt4 book ai didi

mysql - 从 2 个表中检索数据

转载 作者:行者123 更新时间:2023-11-28 23:18:00 24 4
gpt4 key购买 nike

我有 2 个表,描述如下。

  • 表 1:客户,列:customer_id,来源
  • 表 2:来源,列:来源,排名

一个客户会有很多来源,每个来源在排名表中都有一个特定的排名,我需要以这样一种方式获取数据,即对于每个拥有最低排名来源的客户,我需要获取这些记录。

这是一个例子:

客户表数据为

1 abc
2 efg
3 abc
1 efg
1 hij
2 hij

源表数据为

abc 2
hij 1
efg 3

结果集应该是:

1 hij
2 hij
3 abc

最佳答案

您可以使用以下两个查询中的任何一个来满足您的要求。

查询 1

SELECT c.customer_id, 
c.source
FROM customer c
INNER JOIN source s
ON c.source = s.source
WHERE s.rank = (SELECT Min(s1.rank)
FROM source s1 inner join customer c1 on s1.source = c1.source
WHERE c1.customer_id = c.customer_id)

查询 2

SELECT x.customer_id ,
c1.source
FROM
(SELECT c.customer_id ,
MIN(s.rank) AS MinRank
FROM customer c
INNER JOIN SOURCE s ON c.source = s.source
GROUP BY c.customer_id) x
INNER JOIN customer c1 ON x.customer_id = c1.customer_id
INNER JOIN SOURCE s1 ON s1.source = c1.source
AND s1.rank = x.MinRank;

更新 1

此更新是为了回应您对 3 个表而不是 2 个表的评论。当您的架构分布在 3 个表中时,下面的查询将扩展查询 1

SELECT c.customer_id, 
s.source_name
FROM customer c
INNER JOIN source s
ON c.cust_id = s.cust_id
INNER JOIN rank r
ON s.source_name = r.source_name
WHERE r.rank = (SELECT Min(r1.rank)
FROM customer c1
INNER JOIN source s1
ON s1.cust_id = c1.cust_id
INNER JOIN rank r1
ON r1.source_name = s.source_name
WHERE c1.cust_id = c.cust_id);

关于mysql - 从 2 个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43013072/

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