sql join на два поля в одной таблице - PullRequest
2 голосов
/ 28 октября 2011

у меня есть таблица заказов, в которой есть два человека - я хочу вернуть person_1 как строку, person_2 как новую строку, но с идентификатором человека, связанным с таблицей people

Это насколько я получил -но не извлекает информацию о бронировании

 SELECT people.* FROM (
    (select booking.person_1 as id from booking)
    union ALL
    (select booking.person_2 as id from booking)
) as peopleids
join people on people.id = peopleids.id;

вот моя структура

CREATE TABLE IF NOT EXISTS `booking` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `slot` enum('morning_drive','afternoon_loop','return_drive') NOT NULL,
  `type` enum('911','vintage_911') NOT NULL,
  `car` int(11) NOT NULL,
  `person_1` int(11) DEFAULT NULL,
  `person_2` int(11) DEFAULT NULL,
  `dated` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;


CREATE TABLE IF NOT EXISTS `people` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(50) NOT NULL,
  `last_name` varchar(50) NOT NULL,
  `organisation` varchar(100) NOT NULL,
  `event_date` date NOT NULL,
  `wave` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

любые идеи о том, как я могу получить набор результатов, например: person.first_name, person.last_name, person.organisation, booking.dated, person.car, person.slot.я изо всех сил пытаюсь иметь два поля и заставить их связать их в один список

обновить для всех, кто интересуется этим, и присоединиться к 3-ей таблице

вот мой последний запрос сPHP Vars, чтобы получить мои определенные даты и слоты, а также присоединиться к третьей таблице

    SELECT peopleids.id, 
       peopleids.car, 
       cars.nr, 
       p.first_name, 
       p.last_name, 
       p.organisation, 
       p.event_date, 
       p.wave 
FROM (SELECT booking.car, booking.person_1 as id FROM booking WHERE booking.dated = '".$date."' AND booking.`slot` =  '".$slot."' 
        union ALL SELECT booking.car, booking.person_2 as id FROM booking  WHERE booking.dated = '".$date."' AND booking.`slot` = '".$slot."' 
     ) as peopleids
LEFT JOIN people p ON p.id = peopleids.id  LEFT JOIN cars on cars.id = peopleids.car;

Ответы [ 2 ]

1 голос
/ 28 октября 2011
 SELECT 
       ag.id, 
       p.first_name, 
       p.last_name, 
       p.organisation, 
       p.event_date, 
       p.wave
 FROM (
      SELECT booking.person_1 as id, booking.Car as car FROM booking
      union ALL
      SELECT booking.person_2 as id, booking.Car as car FROM booking
     ) as ag
JOIN people p ON people.id = ag.id;
INNER | LEFT JOIN Cars c ON c.ID = ag.car
0 голосов
/ 28 октября 2011
    select people.first_name as firstname,
            people.last_name as lastname,
            people.organisation,
            booking.dated,
            booking.car,
            booking.slot from booking
left join people on booking.person_1 = people.id

OR

select people.first_name as firstname,
            people.last_name as lastname,
            people.organisation,
            booking.dated,
            booking.car,
            booking.slot
 from booking
left join people on booking.person_1 = people.id or booking.person_2 = people.id

проверьте, что ... если вам все еще нужна помощь, вам помогут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...