Reputation: 53
I'm having trouble coming up with a query to determine what records are missing from my mysql database.
I don't know how to loop through to find whats missing from a structured listing.
I have a database used as a locations map for an online game I play, field structure is as follows:
Region | Province | City | PlayerInfo
Region/province/city are all numeric values. Region values are 1-30 and Province values are 1-500. These are fixed. My database is to list all the cities a player might have. A given province could have up to 20 cities, or none. When there are no cities in a province, I create a record in the db with blank city and playerinfo values.
For example:
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
What I'm trying to do is find what region/province combinations are missing. In the sample data here, I would want to know R:1 P:5.
Is there a way to do this? Let me know if I can provide any more information
Upvotes: 3
Views: 257
Reputation: 9006
Assuming you have 2 tables (province and region) containing data about province and region (if not it is easy to create them with just numeric values as stated on the question):
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
this query should give you back all combinations which are not in the table you drawn above.
EDIT
this is how looks the query after the comments below:
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
Upvotes: 1