这是关于mysql的新手问题,我在同一个数据库中有以下两个表
Users vehicles
User Level Group Vehicle User GroupID
A 0 AG x A x
a1 1 AG y a2 x
a2 1 AG z a1 x
B 0 BG
b1 1 BG
b2 1 BG
具有Level = 0的User.user是超级用户(每个组只有一个超级用户)。
在车辆中用户是在Users.user上的Fk,现在需要创建新列GroupID。在这里我遇到了问题,我需要将 GroupID 值设置为Users.User的超级用户的User.User。
最后,车辆表应该看起来像
Vehicle User GroupID
x A A
y a2 A
z a1 A
对整个Vehicle表格执行此操作的任何示例查询对我都有帮助,谢谢。
答案 0 :(得分:1)
您需要使用用户定义的变量来根据相关组填充您的车辆表
UPDATE `vehicles` v
JOIN (
SELECT
`User` ,
@g:=`Level`,
@u:= CASE WHEN @g= 0 THEN `User` ELSE @u END `new_group`
FROM users
JOIN(SELECT @g:=-1 ,@u:='') t
ORDER BY `User` ,`Level`
) n
ON(n.`User` = v.`User`)
SET v.GroupID = n.new_group
答案 1 :(得分:0)
UPDATE
user.vehicles
SET
user.vehicles.GroupID = user.user.User
FROM
user.vehicles
INNER JOIN
(SELECT User FROM user.user WHERE Level = 0) user.user
ON
user.user.User = user.vehicles.User
或
UPDATE
user.vehicles
SET
user.vehicles.GroupID = (SELECT User FROM (SELECT User FROM user.user WHERE Level = 0))
尝试以上查询我希望帮助你........ !!
答案 2 :(得分:0)
您可以为新列更新此表格。
UPDATE
vehicles v
SET
v.GroupID = (SELECT User FROM Users WHERE Level = 0 AND Group IN (SELECT Group FROM Users WHERE User = v.User));