簡體   English   中英

不明確的列名錯誤,我該如何解決?

[英]Ambiguous column name error, how do I fix it?

1. Users 4 Cols
UserID - UserName - RealName - Flags

2. UsersGroups 2 Cols
UserID - GroupID

3. Groups 3 Cols
GroupID - GroupName - Flags

我想要做的是選擇一個特定的用戶名,即 USERA 並更新標志列。 但我還想將 Groups 表中的 Flags 列更新為相同的值。

UPDATE dbo.Users
SET Flags = @var
WHERE UserName = 'UserA'

UPDATE dbo.Groups
SET Flags = @var
FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'

但我不斷收到:不明確的列名“標志”。

如果我設置 Groups.Flags = @Var 我得到:消息 4104,級別 16,狀態 1,第 1 行 無法綁定多部分標識符“Groupy.Flags”。

您需要為 Groups 表添加別名。 改變這個:

UPDATE dbo.Groups
SET Flags = @var
FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'

對此:

UPDATE g -- change dbo.Groups here to simply 'g'
SET g.Flags = @var
FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'

問題是您沒有為“Flags”字段指定表名,它可能存在於查詢中的多個表中。 在所有引用的前面添加格式為“Tablename.flags”的表名以修復問題。

UPDATE g
SET g.Flags = @var
FROM
  dbo.Groups g
    INNER JOIN
  dbo.UsersGroups ug
    ON g.GroupID = ug.GroupID
    INNER JOIN
  dbo.Users u
    ON u.UserID = ug.UserID
WHERE u.UserName = 'UserA'
  • 在 from 子句中 - 更新目標需要是那里的第一個表。
  • 在 update 子句中 - 使用在 from 子句中創建的表別名。
  • 在 set 子句中 - 使用在 from 子句中創建的表別名。

我曾經知道這種舞蹈需要這樣做的原因——現在我只是出於習慣這樣做。 我懷疑這與 TSQL 在 DELETE 語句中的雙 FROM 子句有關,並且有可能在 FROM 和 UPDATE 子句之間討論 Groups 表的兩個不同實例......甚至是 from 中的 Groups 表的兩個不同實例子句(認為自連接)。

只需在更新語句中執行 alias.Flags 或 TableName.Flags 即可。

於是就變成了這樣:

UPDATE dbo.Users
     SET Flags = @var
     WHERE UserName = 'UserA'

UPDATE g
   SET g.Flags = @var
FROM dbo.Users u 
INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g       ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'
UPDATE dbo.Groups Set dbo.Groups.Flags = @var FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID WHERE u.UserName = 'UserA'

在第二次更新中嘗試 SET Groups.Flags = @var

youTableAlias.Flags

在你的例子中:g.Flags

這是一個解決方法(盡管可能不是最佳解決方案):

UPDATE dbo.Groups
SET Flags = @var
FROM dbo.UsersGroups ug INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE ug.UserID IN (SELECT UserID FROM dbo.Users WHERE UserName = 'UserA')

為條件提及 ON 子句的正確表列

FROM database2.student 學生 LEFT JOIN database2.college college ON student.college_id = college.college_id ORDER BY college.college_id

由於表之間的名稱混淆而發生此錯誤用表名稱正確提及表列這將起作用..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM