Можно ли использовать оператор UPDATE в качестве оператора INSERT? - PullRequest
0 голосов
/ 13 февраля 2020

Я использую MYSQL, и мои таблицы, как показано ниже. мне нужно обновить speciality_name поле в таблице specialities, соответствующее list_of_specialities в таблице clinics, но когда я делаю это, как показано ниже

UPDATE clinics c
  LEFT 
  JOIN specialities s
    ON s.clinic_id = c.clinic_id
   SET s.speciality_name = concat_ws('',c.list_of_specialities,s.speciality_id)
 WHERE  s.clinic_id = c.clinic_id

моя таблица выглядит так

speciality_id   speciality_name     clinic_id
            6   data                16

, поскольку для других list_of_specialities нет speciality_id Я думаю, что я должен вставить другие, но мне нужно, чтобы он был вставлен автоматически, и мне действительно нужно, чтобы таблица выглядела так

speciality_id   speciality_name     clinic_id
            6   data                16
            7   data2               16
            8   data3               16
            9   data4               16
           10   asdsads             16

CREATE TABLE IF NOT EXISTS `clinics` (
  `clinic_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `clinic_name` varchar(100) DEFAULT NULL,
  `location` varchar(500) DEFAULT NULL,
  `list_of_specialities` json DEFAULT NULL,
  PRIMARY KEY (`clinic_id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `doctors` (
  `doctor_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `first_name` varchar(50) DEFAULT NULL,
  `last_name` varchar(50) DEFAULT NULL,
  `age` int(10) UNSIGNED DEFAULT NULL,
  `clinic_id` int(10) UNSIGNED NOT NULL,
  `speciality_id` int(10) UNSIGNED NOT NULL,
  `user_id` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`doctor_id`),
  KEY `Doctor_FKIndex1` (`clinic_id`),
  KEY `Doctor_FKIndex2` (`speciality_id`),
  KEY `Doctor_FKIndex3` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `specialities` (
  `speciality_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `speciality_name` varchar(100) DEFAULT NULL,
  `clinic_id` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`speciality_id`),
  KEY `Speciality_FKIndex1` (`clinic_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

1 Ответ

0 голосов
/ 13 февраля 2020

проблема решена с небольшим изменением поля speciality_name. это должны быть операторы UNIQUE INDEX и REPLACE. Вот пример:

REPLACE 
INTO specialities
SET speciality_name = 'data1', clinic_id = '16'
...