MySQL проблема: заполнить таблицу из другой таблицы, но ссылается на идентификатор вместо имени - PullRequest
1 голос
/ 28 февраля 2010

Я сейчас пытаюсь заполнить мою таблицу «testMatch» (ниже) данными из моей «сводной» таблицы:

ТАБЛИЦА ИСПЫТАНИЙ

<code>
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| match_id         | int(11)      | NO   | PRI | NULL    |       | 
| match_date       | date         | YES  |     | NULL    |       | 
| ground           | varchar(50)  | YES  | MUL | NULL    |       | 
| homeTeam         | varchar(100) | YES  | MUL | NULL    |       | 
| awayTeam         | varchar(100) | YES  | MUL | NULL    |       | 
| matchResult      | varchar(100) | YES  | MUL | NULL    |       | 
| manOfMatch       | varchar(30)  | YES  |     | NULL    |       | 
| homeTeam_captain | int(10)      | YES  | MUL | NULL    |       | 
| homeTeam_keeper  | int(10)      | YES  | MUL | NULL    |       | 
| awayTeam_captain | int(10)      | YES  | MUL | NULL    |       | 
| awayTeam_keeper  | int(10)      | YES  | MUL | NULL    |       | 
+------------------+--------------+------+-----+---------+-------+

Нет проблем с заполнением match_id -----> manOfMatch - это «homeTeam_captain», «homeTeam_keeper», «awayTeam_captain» и «awayTeam_keeper», которые у меня возникают при вводе.

КРАТКИЙ ОБЗОР

<code>
mysql> DESCRIBE SUMMARY;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| matchID         | int(11)      | NO   | PRI | NULL    |       | 
| Test            | int(11)      | YES  |     | NULL    |       | 
| matchDate       | date         | YES  |     | NULL    |       | 
| Ground          | varchar(50)  | YES  |     | NULL    |       | 
| HomeTeam        | varchar(100) | YES  |     | NULL    |       | 
| AwayTeam        | varchar(100) | YES  |     | NULL    |       | 
| matchResult     | varchar(50)  | YES  |     | NULL    |       | 
| MarginRuns      | int(11)      | YES  |     | NULL    |       | 
| MarginWickets   | int(11)      | YES  |     | NULL    |       | 
| ManOfMatch      | varchar(40)  | YES  |     | NULL    |       | 
| HomeTeamCaptain | varchar(30)  | YES  |     | NULL    |       | 
| HomeTeamKeeper  | varchar(30)  | YES  |     | NULL    |       | 
| AwayTeamCaptain | varchar(30)  | YES  |     | NULL    |       | 
| AwayTeamKeeper  | varchar(30)  | YES  |     | NULL    |       | 
+-----------------+--------------+------+-----+---------+-------+
Мне нужно как-то выбрать данные из сводки, получить соответствующий player_id и ввести player_id в мой «testMatch». Таблица игроков ниже:

ТАБЛИЦА ИГРОКОВ

<code>
mysql> describe players;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| player_id      | int(11)      | NO   | PRI | NULL    | auto_increment | 
| player_surname | varchar(30)  | YES  |     | NULL    |                | 
| team           | varchar(100) | YES  | MUL | NULL    |                | 
+----------------+--------------+------+-----+---------+----------------+

Так, чтобы уточнить, например. Я хочу выбрать данные homeTeam_captain ИЗ сводной таблицы, НО не имя, а вместо этого соответствующий идентификатор игрока.

Я предполагаю, что мне нужно использовать какие-то соединения / подзапросы, чтобы сделать это ... Я попытался сначала найти правильный запрос выбора, чтобы убедиться, что я извлекаю правильные данные, и я использовал приведенный ниже код для тестирования (спасибо пользователю Larry_Croft за помощь в этом):

<code>
select matchID, player_id, player_surname, team from players p, summary s
where
s.hometeamcaptain = p.player_surname AND s.HomeTeam = p.team ORDER BY matchID;

Но это правильно возвращает 65 строк (65 совпадений), НО я тогда попробовал это с:

<code>
select matchID, player_id, player_surname, team from players p, summary s
where
s.hometeamKEEPER = p.player_surname AND s.HomeTeam = p.team ORDER BY matchID;

Но это возвращает только 61 строку (должно быть 65), поэтому у меня должна быть ошибка в логике.

После того, как этот выбор заработал, мне нужно каким-то образом включить его в мой оператор INSERT INTO ..... SELECT, чтобы поместить все данные в таблицу testMatch.

Надеюсь, это имеет смысл, и спасибо за вашу помощь!

1 Ответ

0 голосов
/ 28 февраля 2010

Что ж, мне кажется, что существует eitehr hometeamKEEPER с нулевым значением или значение hometeamKEEPER отсутствует в таблице игроков.

Используя следующий запрос, вы сможете найти родной город KEEPER, которого нет в таблице игроков:

SELECT matchID, player_id, player_surname, team 
FROM players p 
     RIGHT JOIN summary s ON p.hometeamKEEPER = p.player_surname AND 
                             s.HomeTeam = p.team
ORDER BY matchID;
...