如何将此连接值分配回其表格?

时间:2015-12-17 15:30:37

标签: mysql sql database

我有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'

如何将此字符串值分配回部件?

3 个答案:

答案 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)

另请参阅stackoverflow.com/../how-to-use-join-in-update-query

答案 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>
祝你好运!