2012-05-21 3 views
0

У меня есть схема, как этотЗаполняет таблицу с внешними ключами в нем

CREATE TABLE TrainManager(
    train_name VARCHAR(5) REFERENCES Train(name), 
    station_id  INT REFERENCES Station(station_id) 
); 

Две справочные таблицы имеют косвенные отношения.

управление (ctrl_id, train_name);

controlremote (ctrl_id, station_id);

Как вы можете, чтобы получить train name и station id, мы должны получить в двух других таблиц для сравнения ctrl_id, кроме сравнения train_name и station_id.

$query = "INSERT INTO `train` (train_name, station_id) 
    SELECT t.train_name, st.station_id 
    FROM train, station 
    WHERE t.train_name = (SELECT c.train_name FROM control c 
          WHERE c.train_name = t.train_name) 
      AND 
      st.station_id = (SELECT cr.station_id FROM controlremote cr 
          WHERE cr.station_id = st.station_id) 
      AND 

Но я не могу думать о правильной SQL synatx для сравнения ctrl_id ...

ответ

3
INSERT INTO `train` (train_name, station_id) 
SELECT control.train_name, controlremote.station_id 
FROM control 
LEFT JOIN controlremote ON control.ctrl_id = controlremote.ctrl_id 

Что-то по этому пути. Просто присоедините обе таблицы по адресу ctrl_id. Надеюсь, я правильно понял.

+0

Большое спасибо за помощь. Теперь ясно. Я использую ту же идею в моем проекте. Благодарю. – user1012451