2012-07-22 67 views
2

我有两个子查询的INSERT查询:SQL插入子查询的错误

INSERT INTO Work_Order (ID ,BRANCHID,BRANDID) 
VALUES (66), 
SELECT ID FROM Brands WHERE NAME = 'branch' 
SELECT ID FROM Branches WHERE NAME = 'brand' 

我知道这是不是一个正确的语法,但我需要一个正确, 的ID必须是66和BRANCHID,BRANDID外键另一个表

+0

如果你是通过获取从另一个表的东西,那么你的设计是错误的东西插入到数据库中完美地工作。我说重新思考。 – nawfal 2012-07-22 19:40:49

+0

看我不是DB专业人员,设计由3个表格组成,第一个是我插入的表格,BRANCHID是另一个称为分支的表格的外键,同样用于品牌,用户将分支的名称我会插入它的ID,我认为这是一个很好的设计,不是吗? – 2012-07-22 21:55:47

+0

哦,我很愚蠢,那很好,我有一刻以为你插入'分支','品牌'等,而不是他们的ID。道歉.. :) – nawfal 2012-07-23 06:36:24

回答

0

如果您的子查询返回多行,您必须决定如何组合这些值。下面的查询假设你希望所有的组合:

INSERT INTO Work_Order (ID ,BRANCHID, BRANDID) 
    select 66, branches.id, brands.id 
    from brands cross join branches 
    where branches.NAME = 'branch' and 
      brands.NAME = 'brand' 

(我改变了where子句在同一个表中查找名作为名称branches.Name =“分支”,而不是branches.name =。 “品牌”。)

+0

这就是我所做的,它的工作完美。 – 2012-07-22 19:35:07

4

66是文字,用它和两个子选择在您的SELECT

INSERT INTO Work_Order (ID ,BRANCHID,BRANDID) 
SELECT 
    66 AS ID, 
    (SELECT ID FROM Brands WHERE NAME='branch') AS BRANCHID, 
    (SELECT ID FROM Brands WHERE NAME='brand') AS BRANDID 

MySQL是宽松些一个FROM条款的存在,所以这应该工作。许多其他RDBMS将要求您在某个表中输入FROM子句,即使它未在SELECT(如Oracle的Dual表中)中使用。

1

这是怎么跟我

INSERT INTO Work_Order (NUMBER,BRANDID,BRANCHID)  
SELECT 66,B.ID,Br.ID 
FROM Brands as B,Branches as Br 
WHERE B.NAME = 'brand' AND Br.NAME = 'branch'