SQL-запрос вставки для нескольких строк с общими значениями
У меня есть простая таблица Users (имя, город, страна), и мне нужно добавить несколько строк, где некоторые значения совпадают (город, страна). Есть ли лучший способ вставить данные в:
insert into Users (name, city, country) values
("John", "Paris", "France"),
("Anna", "Paris", "France"),
("Peter", "Paris", "France"),
("Mary", "Paris", "France")
Спасибо
4 ответа
Вы можете использовать запрос, подобный следующему:
insert into Users (name, city, country)
select name, city, country
from (select 'John' as name union all
select 'Anna' union all
select 'Peter' union all
select 'Mary') as t1
cross join (select 'Paris' as city, 'France' as country) as t2
Вы должны быть в состоянии использовать переменные. Так будет выглядеть...
set @city="Paris";
set @country="France";
insert into Users(name, city, country) values
("John", @city, @country)
Хотя вы могли бы несколько упростить это, используя переменные в вашем конкретном синтаксисе РСУБД, вы застряли на вставке одних и тех же значений в несколько строк таблицы из-за конструктивного решения, которое вы приняли при определении вашего Users
Таблица.
Проблема в том, что ваша таблица не нормализована, что означает, что одна и та же информация присутствует несколько раз. Надлежащим способом исправить это будет определение таблицы стран, таблицы городов, ссылающихся на нее, и изменение Users
таблица для ссылки Cities
,
Your solution is correct normaly but try to replace " by ' else try it:
insert into Users (name, city, country)
select *
from (
select 'John', 'Paris', 'France' union all
select 'Anna', 'Paris', 'France' union all
select 'Peter', 'Paris', 'France' union all
select 'Mary', 'Paris', 'France'
) tmp