2

2つのサブクエリを持つ挿入クエリがあります。

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は別のテーブルの外部キーです。

4

3 に答える 3

4

66はリテラルです。これと2つの副選択を使用してください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では、 (Oracleのテーブルのように)FROM使用されていない場合でも、テーブルを含む句を挿入する必要があります。SELECTDual

于 2012-07-22T12:15:36.133 に答える
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'
于 2012-07-22T19:33:34.377 に答える
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句を変更して、名前と同じテーブル内の名前を検索します。.. .branchs.Name ='brand'ではなくbranchs.Name='branch'。)

于 2012-07-22T13:28:30.523 に答える