2016-07-15 72 views
0

我有一個簡單的表用戶(名稱,城市,國家),需要添加幾個值,其中一些值相同(城市,國家)。有沒有更好的方式來插入旁邊的數據:SQL插入查詢用於乘以具有共享值的行

insert into Users (name, city, country) values 
("John", "Paris", "France"), 
("Anna", "Paris", "France"), 
("Peter", "Paris", "France"), 
("Mary", "Paris", "France") 

謝謝

+0

您正在使用哪種RDBMS? –

+0

一般不會,但如果您沒有將其用作手動查詢,則應該使用「準備好的語句」。無論你的項目語言是什麼,它都有它們。您只需設置一次城市和國家的參數並循環(設置和插入)即可。這對你的網站/應用程序會更好,另外Prepared Statements可以保證你的SQL注入安全。 – coladict

回答

2

您可以使用類似下面的查詢:

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 
0

您應該能夠使用變量。因此,它看起來像......

set @city="Paris"; 

set @country="France"; 

insert into Users(name, city, country) values 
("John", @city, @country) 
0

雖然可以簡化這個有點通過在特定的RDBMS語法使用變量,你被卡住插入相同的值到表的多個行由於設計決策您在定義Users表時所做的。

問題是您的表格不是正常化,這意味着相同的信息多次出現。解決這個問題的正確方法是定義一個國家表格,一個引用它的城市表格,並將Users表格更改爲參考Cities

0
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