проблема в поиске дочернего поля из основного поля в MySQL - PullRequest
3 голосов
/ 29 октября 2010

У меня есть две таблицы, как показано ниже

CREATE TABLE IF NOT EXISTS `countries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=196 ;

И еще одна

CREATE TABLE IF NOT EXISTS `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `admission_no` varchar(255) DEFAULT NULL,
  `nationality_id` int(11) DEFAULT NULL,
  `country_id` int(11) DEFAULT NULL,
  `is_active` tinyint(1) DEFAULT '1',
  `is_deleted` tinyint(1) DEFAULT '0',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `admission_no` (`admission_no`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin

1 AUTO_INCREMENT=2 ;

Итак, проблема в том, что я хочу получить как nationality_id, country_id имя из таблицы стран дляДля этого мне нужно использовать запрос LEFT JOIN, поэтому в этом случае я сталкиваюсь с проблемой, поскольку я получаю одно и то же имя для обоих, если nationality_id, country_id различны, так как я могу соединиться только на одной таблице, так что кто-то может помочь мне с этимэто.

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Если я вас правильно понимаю, вы можете достичь этого, ЛЕВАЯ СОЕДИНЯЯСЬ за одной и той же таблицей дважды, используя псевдонимы.

Что-то вроде

SELECT *
FROM students s LEF TJOIN
countries c ON s.country_id = c.id LEFT JOIN
countries n ON s.nationality_id = n.id
0 голосов
/ 29 октября 2010

@ astander в вашем запросе есть небольшая ошибка (второй псевдоним для стран n не используется в операторе on).вот правильное утверждение.

select  s.Id, cNationality.Name, cCountry.Name
from    Students as s
left outer join Countries as cNationality on cNationality.Id = s.Nationality_id
left outer join Countries as cCountry on cCountry.Id = s.Country_id
...