2016-12-03 2 views
0

У меня есть две таблицы.Вставьте внешний ключ в таблицу

в основном я хочу, чтобы вставить id и string в таблицу

Однако id внешний ключ в другую таблицу, в которой customerId является первичным ключом

Кроме того мой родительская таблица имеет name

Что у меня есть, это name и string, которые я получаю из Интернета. Однако, поскольку у меня нет id, которые соответствуют customerid имени в родительской таблице, я не знаю, как вставить его.

я получил это до сих пор, что, кстати, моя глупая попытка работать мой человеческой логики вокруг этого вопроса:

INSERT INTO `PostDb`(`Offer`) 
VALUES ("String") AND PostDb.id 
WHERE CustomerDb.id = PostDb.id AND CustomerDb.name = "MyNameThatIHave" 

Что бы работать, хотя. является то, что я делаю следующее:

SELECT PostDb.id 
FROM `PostDb` JOIN CustomerDb 
WHERE `CustomerId` = CustomerDb.id AND CustomerDb.name = "MyNameThatIHave" 

И затем использовать идентификатор, который я получаю в новой команде вставки, как это:

INSERT INTO `PostDb`(`CustomerId`, `Offer`) 
VALUES ("THE ID I GOT BEFORE","STRING") 

В основном я хочу достичь в одном запросе, что два до Указанные запросы делают

ответ

0

Вы можете использовать SELECT, чтобы получить значения для вставки:

INSERT INTO `PostDb`(`Offer`, customerid) 
    SELECT 'Whatever', id FROM customerdb 
    WHERE name = 'MyNameThatIHave' 
+0

Но как я могу заставить его использовать этот идентификатор из выбранного в моем заявлении о вставке? –

+0

@ Jeppe Написав это точное утверждение, я написал? –

+0

Но я не понимаю, почему я набираю строку? :-) –

0

вы пробовали LAST_INSERT_ID() функцию, которая дает вам последний добавленный ID PK при условии, что ID является auto_increment колонкой.

Как только вы это получите, вы можете вставить свою дочернюю таблицу в столбец FK вместе с остальными атрибутами.

В этом случае использовать INSERT INTO .. SELECT FROM построить как

INSERT INTO `PostDb`(`CustomerId`, `Offer`) 
SELECT PostDb.`CustomerId`, 'Some Value' 
FROM `PostDb` JOIN CustomerDb 
ON `PostDb`.`CustomerId` = CustomerDb.id 
WHERE CustomerDb.name = "MyNameThatIHave"; 
+0

я действительно очень промежуточного звена к MySQL. Поэтому я действительно не знаю, что такое Last_insert_ID(). Но да, customerDB.id - это AI –

+0

@JeppeChristensen, см. Редактирование в ответ и перейдите по связанной документации MySQL для получения дополнительной информации. – Rahul

+0

О, подождите. Он не должен быть последним вставленным ID. У меня есть 7 разных объектов в таблице, и это может быть, например. be id = 4 –

Смежные вопросы