[SOLVED] Query returns varying result sets
Posted: Sun Nov 09, 2014 11:10 am
I am using MariaDB on debian/gnu/linux/stable. I have a database with three tables.
Persons:
There are 525 records in this table
Marriages:
There are 100 records in this table.
Months:
Here is my query:
The query involves two tables, persons and months. The variable @rn is the search target. The query always resolves the inner join statement. As long as @rn < 99 I get an accurate result of a Mother and Father for the target person. When @rn = 99 returns the Mother's record but not the Father's even though the Father's information is populated in record 99. If @rn > 99 the query returns a null set even though the Father's and Mother's Father's information is populated in the target person's record.
Does anyone have any ideas what may be happening here?
Persons:
Code: Select all
+--------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+-------+
| record_number | int(10) | NO | PRI | NULL | |
| surname | varchar(20) | YES | | NULL | |
| given_name | varchar(30) | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| fathers_rn | int(10) | YES | | NULL | |
| mothers_rn | int(10) | YES | | NULL | |
| birth_date_prefix | varchar(20) | YES | | NULL | |
| birth_year | varchar(10) | YES | | NULL | |
| birth_month | varchar(10) | YES | | NULL | |
| birth_day | varchar(10) | YES | | NULL | |
| birth_city | varchar(20) | YES | | NULL | |
| birth_county | varchar(20) | YES | | NULL | |
| birth_state | varchar(20) | YES | | NULL | |
| death_date_prefix | varchar(20) | YES | | NULL | |
| death_year | varchar(10) | YES | | NULL | |
| death_month | varchar(10) | YES | | NULL | |
| death_day | varchar(10) | YES | | NULL | |
| death_city | varchar(20) | YES | | NULL | |
| death_county | varchar(20) | YES | | NULL | |
| death_state | varchar(20) | YES | | NULL | |
| burial_date_prefix | varchar(20) | YES | | NULL | |
| burial_year | varchar(10) | YES | | NULL | |
| burial_month | varchar(10) | YES | | NULL | |
| burial_day | varchar(10) | YES | | NULL | |
| burial_city | varchar(20) | YES | | NULL | |
| burial_county | varchar(20) | YES | | NULL | |
| burial_state | varchar(20) | YES | | NULL | |
| notes | text | YES | | NULL | |
+--------------------+-------------+------+-----+---------+-------+
Marriages:
Code: Select all
+----------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+-------------+------+-----+---------+-------+
| marriage_number | int(10) | NO | PRI | NULL | |
| husbands_rn | int(10) | YES | | NULL | |
| wifes_rn | int(10) | YES | | NULL | |
| marriage_date_prefix | varchar(20) | YES | | NULL | |
| marriage_year | varchar(10) | YES | | NULL | |
| marriage_month | varchar(10) | YES | | NULL | |
| marriage_day | varchar(10) | YES | | NULL | |
| marriage_city | varchar(20) | YES | | NULL | |
| marriage_county | varchar(20) | YES | | NULL | |
| marriage_state | varchar(20) | YES | | NULL | |
| narrative | text | YES | | NULL | |
+----------------------+-------------+------+-----+---------+-------+
Months:
Code: Select all
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| mo_n | varchar(10) | YES | | NULL | |
| mo_name | varchar(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
Code: Select all
set @rn = <int in 1-525>;
select record_number, given_name, surname, concat (mo_name,' ', birth_day,', ', birth_year)
from persons
inner join months on persons.birth_month=months.mo_n
where record_number in (
select fathers_rn
from persons
where record_number = @rn
)
or record_number in (
select mothers_rn
from persons
where record_number = @rn);
Does anyone have any ideas what may be happening here?