我有一个带有两个子查询的插入查询:
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 是另一个表的外键
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
表)中使用。
这就是它与我完美合作的方式
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'
如果您的子查询返回多于一行,您必须决定如何组合这些值。以下查询假定您需要所有组合:
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'。)