MySQL — Вставка строки с использованием внешнего ключа

#mysql #sql

Вопрос:

Я пытаюсь вставить строку, используя a Foreign Key из другой таблицы, но я не уверен, как это сделать.

Мой вопрос таков

 INSERT INTO customers(
    Customer_Name,
    Address,
    Postal_Code,
    Phone,
    Create_Date,
    Created_By,
    Last_Update,
    Last_Updated_By,
    Division_ID //This is the foreign key. It's the Primary key for my first_level_divisions Table
) VALUES (
    'Alex',
    '123 Sesame Street',
    '12345',
    '123-456-7891',
    '1986-10-22',
    'Alex',
    '1986-10-22 09-30-14',
    'Alex',
    5 //Foreign key I want to insert
)
 

Другим запросом было бы

SELECT Division_ID FROM first_level_divisions WHERE division = 'Alberta'

Как бы я объединил эти два запроса?

Я попытался добавить его в качестве последнего значения, но это не совсем работает

 ) VALUES (
    'Alex',
    '123 Sesame Street',
    '12345',
    '123-456-7891',
    '1986-10-22',
    'Alex',
    '1986-10-22 09-30-14',
    'Alex',
    SELECT Division_ID FROM first_level_divisions WHERE division = 'Alberta'
)
 

Комментарии:

1. Скобки нужны, например (SELECT... 'Alberta') .

2. Или сделать INSERT INTO t SELECT 'Alex', ..., Division_ID FROM first_level_divisions WHERE division = 'Alberta' .

3. А, понял, спасибо!

4. @jarlh: Ваши комментарии были бы хорошим ответом 🙂

Ответ №1:

Для выбора нужны круглые скобки:

 INSERT INTO customers(
    ...
    Division_ID //This is the foreign key. It's the Primary key for my first_level_divisions Table
) VALUES (
    'Alex',
    ... ,
    (SELECT Division_ID FROM first_level_divisions WHERE division = 'Alberta')
)
 

Или сделайте ВЫБОР с помощью ВСТАВКИ:

 INSERT INTO customers(
    Customer_Name,
    Address,
    Postal_Code,
    Phone,
    Create_Date,
    Created_By,
    Last_Update,
    Last_Updated_By,
    Division_ID //This is the foreign key. It's the Primary key for my first_level_divisions Table
)
SELECT
    'Alex',
    '123 Sesame Street',
    '12345',
    '123-456-7891',
    '1986-10-22',
    'Alex',
    '1986-10-22 09-30-14',
    'Alex',
    Division_ID
FROM first_level_divisions
WHERE division = 'Alberta'