MySql 查询 - 查找数据库中缺少的内容

标签 mysql list

我在想出一个查询来确定我的 mysql 数据库中缺少哪些记录时遇到了问题。

我不知道如何循环查找结构化列表中缺少的内容。

我有一个数据库用作我玩的在线游戏的位置 map ,字段结构如下:

地区 |省份 |城市 |玩家信息

地区/省/市均为数值。地区值为 1-30,省份值为 1-500。这些是固定的。我的数据库是列出玩家可能拥有的所有城市。一个给定的省最多可以有 20 个城市,或者没有。当一个省中没有城市时,我会在数据库中创建一条包含空白城市和玩家信息值的记录。

例如:

R | P | C | PI
1 | 1 | 3 | Name1
1 | 1 | 7 | Name2
1 | 2 | 4 | Name3
1 | 3 |   |
1 | 4 | 1 | Name2
1 | 4 | 4 | Name4
1 | 6 | 3 | Name5
etc

我想做的是找到缺少的区域/省组合。在这里的示例数据中,我想知道 R:1 P:5。

有没有办法做到这一点?让我知道是否可以提供更多信息

最佳答案

假设您有 2 个表(省和地区),其中包含有关省和地区的数据(如果没有,则很容易仅使用问题中所述的数值来创建它们):

SELECT comb.reg AS R,comb.pro AS P FROM
   your_table_above t
RIGHT JOIN
(
   SELECT region.id AS reg, province.id AS pro
   FROM region
   JOIN province
   ORDER BY region.id
) AS comb
ON t.R = comb.reg AND t.P = comb.pro
WHERE t.R IS NULL AND t.P IS NULL

此查询应该返回所有不在您上面绘制的表格中的组合。

编辑

下面是评论后查询的样子:

SELECT comb.reg AS R,comb.pro AS P FROM
 loc_table t
RIGHT JOIN
(
   SELECT region.id AS reg, province.id AS pro
   FROM region
   JOIN province
   ORDER BY region.id
) AS comb
ON t.Region = comb.reg AND t.Province = comb.pro
WHERE t.Region IS NULL AND t.Province IS NULL

关于MySql 查询 - 查找数据库中缺少的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049599/

相关文章:

java - 如何使用集合的 addall() 方法?

Python:通过删除每个第 n 个元素从现有列表构建新列表

mysql - SQL : will SERIABLIZABLE insert visable to other non-serizable transaction

PHP/JQuery - 从另一个客户端向客户端发送数据

mysql - 如何在 MySQL 中为现有用户创建数据库?

list - 通过多项选择找出 Spark 列表中取消选择的项目

php - SQL如何在一个字段中搜索某个部分?

php - Laravel 5.6 中如何打印表格数据?

python 数字列表错误地转换为字符串

java - Java中的快速有序列表匹配算法