2017-05-07 80 views
2

您好,MySQL的 - 錯誤代碼1054未知cloumn「players.p_name「where子句」

首先我希望你能證明我的表,我有:

CREATE TABLE `channels` (
`channel_id` int(11) NOT NULL AUTO_INCREMENT, 
`channel_name` varchar(45) DEFAULT NULL, 
PRIMARY KEY (`channel_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 

CREATE TABLE `gamepoints` (
`gp_id` int(11) NOT NULL AUTO_INCREMENT, 
`gamble` int(11) DEFAULT NULL, 
`roulette` int(11) DEFAULT NULL, 
`blackjack` int(11) DEFAULT NULL, 
`slots` int(11) DEFAULT NULL, 
PRIMARY KEY (`gp_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

CREATE TABLE `player_channel` (
`pc_id` int(11) NOT NULL AUTO_INCREMENT, 
`players_id` int(11) DEFAULT NULL, 
`channel_id` int(11) DEFAULT NULL, 
PRIMARY KEY (`pc_id`), 
KEY `players_id_idx` (`players_id`), 
KEY `channel_id_idx` (`channel_id`), 
CONSTRAINT `channel_id` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`channel_id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT `players_id` FOREIGN KEY (`players_id`) REFERENCES `players` (`players_id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

CREATE TABLE `players` (
`players_id` int(11) NOT NULL AUTO_INCREMENT, 
`p_name` varchar(45) DEFAULT NULL, 
`p_right` varchar(45) DEFAULT NULL, 
`gp_id` int(11) DEFAULT NULL, 
PRIMARY KEY (`players_id`), 
KEY `gp_id_idx` (`gp_id`), 
CONSTRAINT `gp_id` FOREIGN KEY (`gp_id`) REFERENCES `gamepoints` (`gp_id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

我想這個查詢:

UPDATE gamepoints SET gamble = 1 
WHERE gamepoints.gp_id = players.gp_id 
AND players.p_name = "test" 
AND player_channel.players_id = players.players_id 
AND player_channel.channel_id = channels.channel_id 
AND channels.channel_name = "test"; 

但是當我這樣做我得到這個錯誤:

Error Code: 1054. Unknown column 'players.p_name' in 'where clause' 

我不知道我在做什麼錯,我試過也設置後添加所有表,但是這也不起作用。

我會很高興,如果有人能幫助我:)

在此先感謝

回答

1

您省略所有,但gamepoints的表名。我會建議你使用顯式連接更新的語法,這使得它很難有這種錯誤的:

UPDATE gamepoints t1 
INNER JOIN players t2 
    ON t1.gp_id = t2.gp_id 
INNER JOIN player_channel t3 
    ON t3.players_id = t2.players_id 
INNER JOIN channels t4 
    ON t4.channel_id = t3.channel_id 
SET t1.gamble = 1 
WHERE t2.p_name = 'test' AND 
     t4.channel_name = 'test'; 

如果你想挽救你當前的查詢,那麼它會開始看起來像這樣:

UPDATE gamepoints, players, player_channel, channels 
SET gamble = 1 
WHERE -- a very large number of conditions 

原因之一隱含連接是令人難以接受的是,他們在混合的結果設置限制正常連接條件,都一樣WHERE子句。這不會發生在我使用顯式連接編寫的查詢中。

+0

非常感謝* - * –

+0

@Darky_Chan標記正確嗎? –

相關問題