2012-01-28 1 views
0

Это может быть трудно понять, поэтому дайте мне знать, если мне нужно будет описать его лучше. Скажем, у меня есть 3 таблицы TABLEA, TableB и tableC со следующим синтаксисом:mysql table move insertions

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 не возвращает фактические значения (я должен был бы отборное я предполагаю) , но мой вопрос заключается в том, как я могу вставить данные из A, поместить их в C, а затем в то же время захватить идентификатор из C и другую точку данных из A и поместить их в B.

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

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

+0

У вас нет ответа? Все еще не видел жизнеспособного способа сделать это ... –

+0

Возможно, вы просите невозможное (для MySQL в любом случае). Я не уверен, что вы беспокоитесь, но вы можете посмотреть, как работают транзакции. Это способ сделать так, чтобы многие заявления практически «происходили сразу». – Andrew

+0

По-видимому, это невозможно, так как никто не может найти решение. Thanks =/ –

ответ

0

Решение выглядит, что есть no solution =/guess, мне придется делать это в нескольких вставках. Спасибо всем за помощь.

0

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

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 
+0

Это не работает, поскольку не удается указать tableB на tableC. Нам нужно убедиться, что tableB.cid сопоставляется с соответствующей строкой в ​​таблице C. И, как я уже говорил, я уже знаю, как это сделать в 2 вставках ... Мне было интересно, возможно ли это в одном запросе. –