SQL插入子查询的错误
问题描述:
我有两个子查询的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外键另一个表
答
如果您的子查询返回多行,您必须决定如何组合这些值。下面的查询假设你希望所有的组合:
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
答
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'
如果你是通过获取从另一个表的东西,那么你的设计是错误的东西插入到数据库中完美地工作。我说重新思考。 – nawfal 2012-07-22 19:40:49
看我不是DB专业人员,设计由3个表格组成,第一个是我插入的表格,BRANCHID是另一个称为分支的表格的外键,同样用于品牌,用户将分支的名称我会插入它的ID,我认为这是一个很好的设计,不是吗? – 2012-07-22 21:55:47
哦,我很愚蠢,那很好,我有一刻以为你插入'分支','品牌'等,而不是他们的ID。道歉.. :) – nawfal 2012-07-23 06:36:24