2012-07-22 114 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'