SQL语法(具有多个外键的INSERTS)

Fra*_*kMN 1 mysql sql select insert

如果我想在查找外键时插入记录,我可以这样做:

INSERT INTO stores_products (name, product_id)
SELECT 'storeABC',
       id 
  FROM products 
 WHERE name = 'product123';
Run Code Online (Sandbox Code Playgroud)

(其中product_id是products表的外键)

但是,当我需要从多个表中查找外键时,我无法弄清楚语法.

例如,我想做类似的事情:

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';
Run Code Online (Sandbox Code Playgroud)

(表名和列名只是一个例子,我知道从数据库设计的角度来看它没有多大意义,但我的问题是关于语法...).谢谢.

OMG*_*ies 5

如果产品和OWNERS记录之间没有关系,请使用:

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'
Run Code Online (Sandbox Code Playgroud)

否则,如果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'
Run Code Online (Sandbox Code Playgroud)

参考: