2012-06-03 10 views
0

나는 이것을 시도한 적이 없으며 잘못되었는지는 알 수 없습니다.Using 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') 

이 방법을 사용할 수 있습니까? 표현이 누락되었다는 오류가 나타납니다. 나는 오라클을 사용하고있다.

+0

"VALUES"키워드를 제거하십시오. INSERT INTO produits (...) SELECT seq_produits.nextval, fournisseur_id, ... FROM .. SELECT 목록의 항목 수가 INSERT 목록의 번호와 일치하는지 확인하십시오. – Glenn

+0

모든 SELECT 문은 최대 하나의 행을 반환하도록 보장됩니까? –

+0

괄호 안에 하위 쿼리를 넣습니다. 즉, Martin Smiths의 질문에 대한 대답이 yes이고 쿼리에 사용 된 이름이 있어야합니다. –

답변

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에 비해 각 하위 쿼리 주위에 필요한 괄호의 추가 설정이 있습니다. 이렇게하면 조인 할 수없는 결과 집합을 조인 할 때 발생하는 문제를 피할 수 있습니다.

INSERT INTO produits(produit_id, ...) 
    SELECT ... 
: 당신이, 당신은 전혀 VALUES 절을 사용하지 것이다 삽입 할 행의 가능성이 큰 번호를 선택하려는 단순히 INSERT 열 목록 후 SELECT 문을 나열합니다 일반적인 경우에,