2012-06-03 7 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

Поместите подзапросы в круглые скобки - то есть, если ответ на вопрос Мартина Смита - да, а имена, используемые в запросе, должны быть. –

ответ

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:

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