INSERT INTO, используя данные из другой таблицы, вызывая ОШИБКУ 1064 - PullRequest
0 голосов
/ 05 июня 2019

Моя команда для INSERT INTO была:

INSERT INTO environment_fid (FID_environment) VALUES SELECT ID FROM environment WHERE name='planes';

Но я получил:

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «SELECT ID FROM environment WHERE name = 'planes" »в строке 1

У меня есть три таблицы, но меня пробовали только с двумя:

CREATE TABLE `environment_fid` (
  `ID` mediumint(9) unsigned AUTO_INCREMENT,
  `FID_environment` mediumint(9) unsigned,
  `FID_monster` mediumint(9) unsigned ,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM;

DROP TABLE IF EXISTS `environment`;
CREATE TABLE `environment` (
  `ID` mediumint(9) unsigned AUTO_INCREMENT,
  `name` text NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM;

Однако, когда я положил по частям:

INSERT INTO environment_fid (FID_environment) VALUES (78);

Запрос в порядке, затрагивается 1 строка (0,00 с)

и

 SELECT ID FROM environment WHERE name='planes';

*+----+
| ID |
+----+
| 66 |
+----+

1 row in set (0.00 sec)*

Понятия не имею об этой проблеме, есть предложения?

Спасибо

INSERT INTO environment_fid (FID_environment) SELECT ID FROM environment WHERE name='planes';

Решите мою проблему, но как я могу получить другие таблицы? Например:

INSERT INTO environment_fid (FID_environment, FID_monster) 
SELECT ID FROM environment  WHERE name='planes',
SELECT ID FROM monster WHERE family='Blue';

Ответы [ 3 ]

2 голосов
/ 05 июня 2019

удалите values и измените ваш запрос на:

INSERT INTO environment_fid (FID_environment) 
SELECT ID FROM environment WHERE name='planes';

или

INSERT INTO environment_fid (FID_environment) VALUES (environment_id)
1 голос
/ 05 июня 2019

Удалить VALUES в INSERT INTO.Вы не можете смешивать VALUES с SELECT в INSERT INTO

Таким образом, ваш рабочий запрос будет:

INSERT INTO environment_fid (FID_environment) 
SELECT ID FROM environment WHERE name='planes';

Некоторые примеры для INSERT INTO оператора

INSERT INTO TableName (Col1, Col2, Col3) VALUES (@Val1, @Val2, @Val3)

или

INSERT INTO TableName (Col1, Col2, Col3) 
SELECT @Val1, @Val2, @Val3
0 голосов
/ 05 июня 2019

Я обнаружил мой последний вопрос:

INSERT INTO environment_fid (FID_environment, FID_monster) 
SELECT 
 (SELECT environment.ID FROM environment WHERE name='planes') AS FID_environment, 
 (SELECT ID FROM monster WHERE family='Blue') AS FID_monster;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...