在INSERT INTO表中使用Select

时间:2012-06-03 17:54:35

标签: sql insert

我从未尝试过,我不知道这是不是错了。

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。

1 个答案:

答案 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列列表后列出SELECT语句:

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