2009-08-28 82 views
76

我不斷收到MySQL錯誤#1054,試圖執行此更新查詢時:未知列

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH 
SET MASTER_USER_PROFILE.fellow=`y` 
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID 
AND TRAN_USER_BRANCH.BRANCH_ID = 17 

這也可能是一些語法錯誤,但我已經嘗試使用內連接,而不是和其他的改變,但我不斷收到了同樣的信息:

Unknown column 'y' in 'field list' 

回答

109

嘗試使用了「Y」作爲標識符引號字符不同的報價是反引號(「`」)。否則MySQL會「認爲」你指向一個名爲「y」的列。

MySQL 5 Documentation

+0

它可以幫助我謝謝你。 – 2017-02-28 05:43:51

15

見你可能會檢查你的報價選擇(使用雙的值,字符串等和反引號/單引號列名)。

由於您只想更新表master_user_profile我建議嵌套查詢:

UPDATE 
    master_user_profile 
SET 
    master_user_profile.fellow = 'y' 
WHERE 
    master_user_profile.user_id IN (
     SELECT tran_user_branch.user_id 
     FROM tran_user_branch WHERE tran_user_branch.branch_id = 17); 
+0

感謝您的建議,這似乎是一個更優雅的方法。 – 2009-08-28 11:46:11

33

包圍任何字符串傳遞給單引號內的MySQL服務器;例如: -

$name = "my name" 
$query = " INSERT INTO mytable VALUES (1 , '$name') " 

注意的是,雖然查詢雙引號引起來,你必須在單引號的字符串。

+0

謝謝。我試圖找出爲什麼我的PHP查詢不起作用,我只需要添加單引號。 – RiCHiE 2016-07-02 05:12:45

+1

我知道這是一箇舊帖子,但你能回答爲什麼你必須把報價? – RiCHiE 2016-07-02 05:13:12

+0

@RiCHiE使用字符串時通常更安全。另外,對於我來說,把字符串放在引號之間更有意義。例如,當你使用像SHA1這樣的函數時,你可以在內部的內容中加入引號,例如'SHA1('$ var')' – George 2016-07-06 18:48:49

2

在我的情況下,它是由列名末尾看不見的尾部空格造成的。只要檢查你是否真的使用「y」或「y」。

0

像THI查詢還,將導致在列選擇子句指定的表不包含在錯誤

select table1.id from table2 

0

在使用EF代碼首先構建.Net應用程序時,我在嘗試應用我的遷移時收到了此錯誤消息,其中有一條Sql("UPDATE tableName SET columnName = value");語句。

原來我拼錯了columnName。