mysql - SQL:4 个表到 1 个表,包含计数、分组和扣除?!

标签 mysql sql

我有一个关于机场失物招领和匹配行李的项目。我用 Java(FX) 和 mySQL 制作的。

这就是我所拥有的: 我有 4 张 table :

1 个表机场有 2 列:

Airport_id & Airport_name

找到 1 个包含 3 列的表:

Found_id & Found_AirportID & Matched

1 个表丢失了 3 列:

Lost_id & Lost_AirportID & Matched

1 个表格匹配 3 列:

Match_id & Match_LostID & Match_FoundID & Match_AirportID

每当进行匹配时,匹配表都会获得一个新行,其中包含 Match_LostID(来自 Lost_id)和 Match_FoundID(来自 Found_id)以及 Match_AirportID(Found_AirportID) 匹配的(在“找到”和“丢失”中)都设置为 1,而不是 NULL

所有 AirportID 都链接到 Airport 表。

我想要什么; 对于每个机场,我想要丢失元素的数量、找到元素的数量以及匹配元素的数量。但是,当元素“匹配”时,它可能不会出现在失物招领的计数中。

所以我想要一个有 4 列的表格: 机场名称、找到数、丢失数、匹配数。

我做了以下查询:

SELECT vv.Airport_name, 
COUNT(DISTINCT gb.Found_id) countFound, 
COUNT(DISTINCT vb.Lost_id) countLost, 
COUNT(DISTINCT kt.Match_id) countMatch
FROM Airports vv
LEFT JOIN Found gb ON vv.Airport_id = gb.Found_AirportID
LEFT JOIN Lost vb ON vv.Airport_id = vb.Lost_AirportID
LEFT JOIN Match kt ON vv.Airport_id = kt.Match_AirportID
WHERE vb.Matched IS NULL OR gb.Matched IS NULL
GROUP BY vv.Airport_name

我设法获取“找到”、“丢失”和“匹配”的所有计数项目。

例如纽约有 2 场找到,2 场失利,1 场比赛。

这在表中正确显示。 但正如我所说,如果存在匹配项,则应将其从“找到”和“丢失”中删除。应该是:

纽约有 1 次找到,1 次丢失,1 次匹配。

我尝试了很多事情,有一次我设法做到了,但后来机场丢失了,或者它从“找到”中扣除,但不是因为丢失......

我不知道解决方案是什么,有人可以解释/给我吗?

提前致谢,

LTKort

最佳答案

Matched IS NULL 检查放入 LEFT JOINON 条件中,而不是 WHERE 中。

SELECT vv.Airport_name, 
    COUNT(DISTINCT gb.Found_id) countFound, 
    COUNT(DISTINCT vb.Lost_id) countLost, 
    COUNT(DISTINCT kt.Match_id) countMatch
FROM Airports vv
LEFT JOIN Found gb ON vv.Airport_id = gb.Found_AirportID AND gb.Matched IS NULL
LEFT JOIN Lost vb ON vv.Airport_id = vb.Lost_AirportID AND vb.Matched IS NULL
LEFT JOIN Match kt ON vv.Airport_id = kt.Match_AirportID
GROUP BY vv.Airport_name

WHERE 中执行此操作的问题是,您只能获得与 LostFound 项目匹配的结果。

关于mysql - SQL:4 个表到 1 个表,包含计数、分组和扣除?!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642327/

相关文章:

java - 为带注释的 MyBatis 插入指定类型处理程序

php - 使用 PHP 对 sql 结果进行排序和计数

mysql - 选择随机行时的 SQL Join 帮助

php - 如何在 MySQL 数据库中获取枚举可能值?

mysql - 使用 MySQL 中的现有计数列创建更新的计数列

sql - 如何使用 SQL Server 在此查询中按天对结果进行分组?

php - 使用单词数组搜索 MySQL 文本列并根据匹配数量排序

mysql - SQL中的多个多对多关系

mysql - mysql查询中如何提高查询速度

mysql - 重复键更新后的多次插入