2010-11-22 71 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' 

否則,如果有之間的關係OWNERS和PRODUCTS表 - 您可以使用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 - 在 「並且其中的名字......」 – 2010-11-22 02:30:06

+0

證實了 'AND WHERE' 語法不使用MySQL的語法錯誤 – Fergal 2011-06-28 00:44:13

1

如果[products.name]和[owners.name]是唯一的,你可以做一個笛卡兒連接使用關鍵字交叉連接。結果將是包含您正在查找的ID的一行。

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';