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'

Я не знаю, что я делаю неправильно, я попытался также после установки добавить из всех таблиц, но это также не работает.

Я был бы очень рад, если бы кто-то мог мне помочь:)

заранее спасибо

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 пункт. Этого не происходит с запросом, поскольку я написал его с помощью явных объединений.

Другие вопросы по тегам