MySql查询 - 查找db中缺少的内容

时间:2011-05-18 18:49:06

标签: mysql list

我无法提出查询以确定我的mysql数据库中缺少哪些记录。

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

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

地区|省|城市| PlayerInfo

地区/省/市都是数字值。区域值为1-30,省值为1-500。这些是固定的。我的数据库是列出玩家可能拥有的所有城市。一个省可能有多达20个城市,或者没有城市。当省内没有城市时,我会在数据库中创建一个空白城市和playerinfo值的记录。

例如:

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。

有办法做到这一点吗?如果我能提供更多信息,请告诉我

1 个答案:

答案 0 :(得分:1)

假设您有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