gpt4 book ai didi

mysql - 如何根据某些子句选择具有所有不同值的列

转载 作者:行者123 更新时间:2023-11-29 02:16:24 25 4
gpt4 key购买 nike

我基本上喜欢有一个查询,我将执行一次并希望得到结果(没有多次查询执行)而且肯定地,查询应该使用简单的 MySQL 结构(没有像 BEGIN 那样使用复杂/高级结构、循环、光标)。

假设我有两张 table 。

1st Table =     Country (id(PK), name);
2nd Table = Businessman (id(PK), name, city, country_id(FK))

喜欢选择所有国家,其商人来自不同的城市。一个国家不存在两个来自同一个城市的商人。如果是这样,SELECT 子句将不会选择该国家/地区。

国家

id  name
1 India
2 China
3 Bahrain
4 Finland
5 Germany
6 France

商人

id  name    city        country_id
1 BM1 Kolkata 1
2 BM2 Delhi 1
3 BM3 Mumbai 1
4 BM4 Beijing 2
5 BM5 Paris 6
6 BM6 Beijing 2
7 BM7 Forssa 4
8 BM8 Anqing 2
9 BM9 Berlin 5
10 BM10 Riffa 3
11 BM11 Nice 6
12 BM12 Helsinki 4
13 BM13 Bremen 5
14 BM14 Wiesbaden 5
15 BM15 Angers 6
16 BM16 Sitra  3
17 BM17 Adliya 3
18 BM18 Caen 6
19 BM19 Jinjiang 2
20 BM20 Tubli 3
21 BM21 Duisburg 5
22 BM22 Helsinki 4
23 BM23 Kaarina 4
24 BM24 Bonn 5
25 BM25 Kemi 4

在这方面,不应列出中国和芬兰。我试过使用 count 和 group by,但没有成功。

你能帮我建立这个查询吗?

最佳答案

在这里,您只需加入商人表并计算城市和不同的城市,如果它们相等,则意味着所有商人都来自不同的城市:

SELECT 
c.`id`,
c.`name`,
COUNT(b.`id`) AS BusinessmanCount,
COUNT(b.`city`) AS CityCount,
COUNT(DISTINCT b.`city`) AS DistinctCityCount
FROM `countries` c
INNER JOIN Businessman b ON c.`id` = b.`country_id`
GROUP BY c.`id`
HAVING CityCount = DistinctCityCount

对于缩小版,您真正需要的是:

SELECT 
c.`id`,
c.`name`
FROM `countries` c
INNER JOIN Businessman b ON c.`id` = b.`country_id`
GROUP BY c.`id`
HAVING COUNT(b.`city`) = COUNT(DISTINCT b.`city`)

关于mysql - 如何根据某些子句选择具有所有不同值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38968749/

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