2012-06-03 56 views
0

我從來沒有試過這個,我不知道它是否是錯誤的。使用選擇內部INSERT INTO表

INSERT INTO produits(produit_id, fournisseur_id, marque_id, categorie_id,produit_nom, 
        produit_prix, produit_description, quantite_stock, 
        date_production, date_expiration) 
    VALUES (seq_produits.nextval, 
      SELECT fournisseur_id FROM fournisseurs WHERE fournisseur_nom='LebanoCop', 
      SELECT marque_id FROM marques WHERE marque_nom='Hyper-Products', 
      SELECT categorie_id FROM categories WHERE categorie_nom='viandes', 
      'Mortadella', 2000, 'tres delicieuse', 100, '25-MAY-2012', '25-MAY-2013') 

可以工作嗎?我收到錯誤,表示缺少表達。我正在使用Oracle。

+0

刪除「VALUES」關鍵字:INSERT INTO produits(...)SELECT seq_produits.nextval,fournisseur_id,... FROM ..確保SELECT列表中的條目數與INSERT列表中的數量匹配。 – Glenn

+0

所有'SELECT'語句都保證最多返回一行嗎? –

+0

將子查詢放在括號內 - 也就是說,如果回答Martin Smiths的問題是肯定的,並且查詢中使用的名稱應該是。 –

回答

0

你似乎想要三個選定的值,它們將是來自三個子查詢中的每一個的單例結果。我認爲,應該工作的符號是:

INSERT INTO produits(produit_id, fournisseur_id, marque_id, categorie_id,produit_nom, 
        produit_prix, produit_description, quantite_stock, 
        date_production, date_expiration) 
    VALUES (seq_produits.nextval, 
      (SELECT fournisseur_id FROM fournisseurs WHERE fournisseur_nom='LebanoCop'), 
      (SELECT marque_id FROM marques WHERE marque_nom='Hyper-Products'), 
      (SELECT categorie_id FROM categories WHERE categorie_nom='viandes'), 
      'Mortadella', 2000, 'tres delicieuse', 100, '25-MAY-2012', '25-MAY-2013') 

有一組額外的比你原來的SQL各地各子查詢所需的括號。這可以避免加入不可加入結果集時的任何問題。

在一般情況下,如果你想選擇一個有可能大量的行插入,你就不會在所有使用VALUES子句,並會簡單地列出INSERT列列表後的SELECT語句:

INSERT INTO produits(produit_id, ...) 
    SELECT ...