我有MySQL的初学麻烦。我正在尝试根据零件的部门和类别构建一个包含十位数字母数字部件号的DB。例如,“Bar”类的部门“Foo”的一部分可能是 FOBAR10000 。部门和类存储在它们自己的表中,因此我将部分表中的ID存储为部件而不是字符串“FO”和“BAR”。
我想出了一个MySQL查询来查找并连接完整的部件名称。
SELECT pl.idPartsList as 'resultid', concat(pd.DeptShortName, pc.ClassShortName,pl.PartIntID) as 'Fullname'
FROM partdepartments pd, partclasses pc, partslist pl
WHERE pl.PartDeptId = pd.idPartDepartments and pl.PartClassID = pc.idPartClasses;
生成:
resultid | Fullname
---------------------
1 | FOBAR10000
我想将此结果分配回PartFullAlphaID列下的部分,如下所示,以避免经常运行此查询。
之前:
idPartslist | PartDeptID | PartClassID | PartIntID | PartFullAlphaID
---------------------------------------------------------------------
1 | 1 | 1 | 10000 |
后:
idPartslist | PartDeptID | PartClassID | PartIntID | PartFullAlphaID
---------------------------------------------------------------------
1 | 1 | 1 | 10000 | FOBAR10000
但以下不起作用:
UPDATE test_db_1.partslist
SET PartFullAlphaID = Fullname
WHERE test_db_1.partslist.idPartsList = resultid;
因为:错误代码:1054。'where子句'中的未知列'resultid'
如何将此字符串值分配回部件?
答案 0 :(得分:5)
这是关于联接表的更新 试试这个查询:
UPDATE partslist pl
JOIN partdepartments pd ON pl.PartDeptId = pd.idPartDepartments
JOIN partclasses pc ON pl.PartClassID = pc.idPartClasses
SET pl.PartFullAlphaID = concat(pd.DeptShortName, pc.ClassShortName, pl.PartIntID)
答案 1 :(得分:0)
您是否尝试过将结果选入变量?
DECLARE @ResultID varchar(10),
@FullName varchar(100)
SELECT @ResultID = pl.idPartsList,
@FullName = concat(pd.DeptShortName, pc.ClassShortName,pl.PartIntID)
FROM partdepartments pd, partclasses pc, partslist pl
WHERE pl.PartDeptId = pd.idPartDepartments
AND pl.PartClassID = pc.idPartClasses;
UPDATE test_db_1.partslist
SET PartFullAlphaID = @FullName
WHERE test_db_1.partslist.idPartsList = @ResultID;
我使用MSSQL
因此语法可能(非常轻微)不同,但我在更新记录时经常使用此语法。
答案 2 :(得分:0)
您可以只是一个动态生成连接值的子查询:
UPDATE test_db_1.partslist
SET PartFullAlphaID = (
SELECT concat(pd.DeptShortName, pc.ClassShortName, partslist.PartIntID)
FROM partdepartments pd, partclasses pc
WHERE partslist.PartDeptId = pd.idPartDepartments
and partslist.PartClassID = pc.idPartClasses
)
--add a filter if you only want to update a subset of the partslist table
--WHERE partslist.<criteria> = <whatever>
祝你好运!