0

私はこのようなスキーマを持っています

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

2つの参照テーブルには間接的な関係があります。

コントロール(ctrl_id、train_name);

controlremote(ctrl_id、station_id);

できる限り、train nameとを取得するには、train_nameとstation_idstation idを比較する以外に、他の2つのテーブルを調べて比較する必要があります。ctrl_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

しかし、ctrl_idを比較するための適切なSQLsynatxを考えることはできません...

4

1 に答える 1

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です。正しく理解できたと思います。

于 2012-05-21T02:31:07.637 に答える