2017-05-07 14 views
2

こんにちは、私はあなたが私が持っている私のテーブルを表示したいすべてのMySQLの - エラーコード1054不明cloumn「players.p_name」「句」

最初に:

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' 

私は何をやっているのか分からない、私はすべてのテーブルから追加するように設定した後もtryedを実行するが、これもうまくいかない。

誰かが私を助けることができる場合、私は本当に幸せになる:)あなたはgamepointsが、すべてのテーブル名を省略し、事前

答えて

1

感謝。

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 

暗黙的な結合が行われる理由の1つは、結合条件付きの結果セットに通常の制限(すべて同じWHERE句内)を混ぜるという理由です。これは明示的な結合を使用して記述したので、クエリでは発生しません。

+0

ありがとう* - * –

+0

@Darky_Chanマークは正しいですか? –

関連する問題