2010-11-22 2 views
1

Если я хочу, чтобы вставить запись при поиске внешнего ключа, я могу сделать это с помощью:SQL синтаксис (Вставки с несколькими внешними ключами)

INSERT INTO stores_products (name, product_id) 
SELECT 'storeABC', 
     id 
    FROM products 
WHERE name = 'product123'; 

(где product_id внешний ключ к таблице продуктов)

Однако я не могу понять синтаксис, когда мне нужно искать внешние ключи из нескольких таблиц.

Например, я хочу сделать что-то вроде:

INSERT INTO stores_products 
    (name, product_id, owner_id) 
SELECT 'storeABC', products.id, owners.id 
FROM products 
WHERE name = 'product123' 
FROM owners 
WHERE name = 'owner456'; 

(Имена таблиц и столбцов просто пример, я знаю, что это не совсем имеет смысла из дизайнерских баз данных точки зрения, но мой вопрос касается синтаксиса ...). Благодарю.

ответ

5

Если нет никакой связи между продуктами и ВЛАДЕЛЬЦЫ записями, использование:

INSERT INTO STORE_PRODUCTS 
    (name, product_id, owner_id) 
SELECT 'storeABC', 
     p.id, 
     (SELECT o.id 
      FROM OWNERS o 
     WHERE o.name = 'owner456') 
    FROM PRODUCTS p 
WHERE p.name = 'product123' 

В противном случае, если существует связь между Стол ВЛАДЕЛЬЦЕВ и ИЗДЕЛИЙ - вы бы указали его с помощью JOIN:

INSERT INTO STORE_PRODUCTS 
    (name, product_id, owner_id) 
SELECT 'storeABC', 
     p.id, 
     o.id   
    FROM PRODUCTS p 
    JOIN OWNERS o ON o.relation_to_product_col = p.relation_to_owner_col 
WHERE p.name = 'product123' 
    AND o.name = 'owner456' 

Ссылка:

0

Попробуйте сделать это нравится:

обновление:

INSERT INTO stores_products 
    (name, product_id, owner_id) 
SELECT 'storeABC', 
     products.id, 
     owners.id 
    FROM products, owners 
    WHERE products.name = 'product123' 
AND WHERE owners.name = 'owner456'; 
+1

ошибка MySQL 1064 - ошибка синтаксиса в «ГДЕ И имя ...» –

+0

подтвердил «И ГДЕ» синтаксис не работает с MySQL – Fergal

1

Если [products.name] и [owners.name] уникальны, вы можете сделать декартово объединение, используя ключевое слово перекрестное соединение. Результатом будет одна строка, содержащая идентификаторы, которые вы ищете.

insert 
    into stores_products(name, product_id, owner_id) 
select 'storeABC' as name 
     ,products.id 
     ,owners.id 
from products cross join owners 
where products.name = 'product123' 
    and owners.name = 'owner456'; 
Смежные вопросы