вставки перемещения таблицы mysql - PullRequest
0 голосов
/ 28 января 2012

Это может быть трудно понять, поэтому дайте мне знать, если мне нужно описать это лучше.Скажем, у меня есть 3 таблицы tableA, tableB и tableC со следующим синтаксисом:

CREATE TABLE tableA (
    data_point_1 VARCHAR(30),
    data_point_2 VARCHAR(30),
    data_point_3 VARCHAR(30)
);

CREATE TABLE tableB (
    bid INTEGER AUTO_INCREMENT,
    cid INTEGER AUTO_INCREMENT,
    data_point_1 VARCHAR(30),
);

CREATE TABLE tableC (
    cid INTEGER AUTO_INCREMENT,
    data_point_2 VARCHAR(30),
    data_point_3 VARCHAR(30)
);

Теперь я хочу перенести данные из tableA в tableB и tableC.Итак, по сути, я хочу что-то вроде:

INSERT INTO tableB
SELECT
    data_point_1,
    (SELECT cid FROM tableC WHERE (INSERT INTO tableC SELECT data_point_2, data_point_3 FROM tableA))
FROM tableA

Я не пробовал выше, но я предполагаю, что это невозможно, поскольку INSERT не возвращает фактические значения (мне нужно выбрать Iпредположим), но мой вопрос заключается в том, как я могу вставить данные из A, поместить их в C, а затем одновременно взять идентификатор из C и другую точку данных из A и поместить их оба в B.

Я думаю,Я, вероятно, могу разбить его на 2 оператора вставки, а затем сделать выбор на C, где data_point_2 = data_point_2 и data_point_3 = data_point_3, но мне было интересно, есть ли способ сделать это только в одном запросе?Я не смог ничего найти, поэтому решил, что я спрошу здесь.

Опять же: я не хочу 2 отдельных запроса на вставку.Я хочу быть в состоянии сделать это в 1. (Потому что теоретически мне, возможно, придется абстрагироваться дальше)

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Решение выглядит так, что решения не существует = / думаю, мне придется сделать это несколькими вставками. Всем спасибо за помощь.

0 голосов
/ 28 января 2012

Вы можете сделать это в два утверждения следующим образом:

INSERT INTO TableB(data_point_1) SELECT data_point_1 FROM TableA
INSERT INTO TablEc(data_point_2,data_point_3) SELECT data_point_2, data_point_3 FROM TableA
...