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是文字,在您的 : 中使用它和两个子选择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表)中使用。

于 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 = 'branch' 而不是branchs.name = 'brand'。)

于 2012-07-22T13:28:30.523 回答