标签: sql-insert

INSERT-OUTPUT包括来自其他表的列

我有一个存储过程需要插入到三个不同的表中,但我需要从一个输入中获取生成的ID并使用它插入到下一个表中.我对这个INSERT-OUTPUT结构很熟悉,但我不确定如何在这种特殊情况下使用它.

DECLARE @guids TABLE ( [GUID] UNIQUEIDENTIFIER );
DECLARE @contacts TABLE ( [ContactID] INT, [GUID] UNIQUEIDENTIFIER );
DECLARE @mappings TABLE ( [TargetID] INT, [GUID] UNIQUEIDENTIFIER );

INSERT @guids ( [GUID] ) ...

INSERT [Contacts] ( [FirstName], [LastName], [ModifiedDate] )
OUTPUT [inserted].[ContactID], g.[GUID]
INTO @contacts
SELECT [First_Name], [Last_Name], GETDATE()
FROM [SourceTable] s
JOIN @guids g ON s.[GUID] = g.[GUID]

INSERT [TargetTable] ( [ContactID], [License], [CreatedDate], [ModifiedDate] )
OUTPUT [inserted].[TargetID], c.[GUID]
INTO @mappings
SELECT c.[ContactID], [License], [CreatedDate], [CreatedDate]
FROM [SourceTable] …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-insert

26
推荐指数
1
解决办法
8448
查看次数

mysql:如果不存在则插入记录,否则返回记录的id

我需要在表中插入唯一值,并且需要记录的id,需要在关系表中插入那些id,如果不存在则需要查询插入记录返回inset id,如果存在则返回记录主键(id ).

我想为多个值做这个,比如橙色,芒果,香蕉,就像批量插入一样.

模式:

------------
id | tag   |
------------
1  | orange|
------------
Run Code Online (Sandbox Code Playgroud)

我把这个记录为一个记录

INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags
WHERE NOT EXISTS (SELECT 1 FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

发布问题以找出一些优化的解决方案,我不想在代码中使用额外的循环来匹配db的值.

mysql sql sql-insert

21
推荐指数
1
解决办法
1万
查看次数

选择具有不同列名的表

在SQL中,将Select into ...行复制到不同的(备份)表中.如果备份表具有不同的结构(或不同的列名),这可能吗?如果没有,实现这一目标的最佳方法是什么?

这是我想要做的:TableA有列a1,a2,a3.我想将此表中的一些行复制到另一个TableB具有列的表中b1,b2,b3,b4.内容a1进入b1,a2b2

sql sqlite sql-insert

19
推荐指数
1
解决办法
5万
查看次数

插入查询检查是否存在记录 - 如果不存在,请插入它

我有一个mysql表ip_list...

+----+---------------+
| id |    ip_addr    |
+----+---------------+
|  1 | 192.168.100.1 |
|  2 | 192.168.100.2 |
|  3 | 192.168.100.3 |
|  4 | 192.168.100.4 |
|  5 | 192.168.100.5 |
+----+---------------+
Run Code Online (Sandbox Code Playgroud)

我想只添加不在ip_addr列中的记录. 对于前者

我有以下记录添加到ip_addr表中

192.168.100.6
192.168.100.10
192.168.100.11
192.168.100.1   //already in column
192.168.100.12
Run Code Online (Sandbox Code Playgroud)

我不想添加192.168.100.1,因为它已经在列中.

那么,INSERT查询是否有可能首先检查记录然后插入它?

目前,我正在这样做..首先我SELECT记录然后匹配它然后INSERT它.

但是,我只想做一个查询.

php mysql sql sql-insert

19
推荐指数
3
解决办法
2万
查看次数

MySQL - 如何插入具有多对多关系的表中

我有一张桌子.每个人都有财产,许多人可能拥有某些财产.所以这是一个多对多的关系.这是架构:

CREATE TABLE persons (
  person_id int(11) NOT NULL AUTO_INCREMENT,
  firstname varchar(30) NOT NULL,
  lastname varchar(30) NOT NULL,
  PRIMARY KEY (person_id)
);

CREATE TABLE properties (
  property_id int(11) NOT NULL AUTO_INCREMENT,
  property varchar(254) NOT NULL UNIQUE,
  PRIMARY KEY (property_id)
);

CREATE TABLE has_property (
  person_id int(11) NOT NULL,
  property_id int(11) NOT NULL,
  PRIMARY KEY (person_id,property_id),
  FOREIGN KEY (person_id) REFERENCES persons (person_id),
  FOREIGN KEY (property_id) REFERENCES properties (property_id)
);
Run Code Online (Sandbox Code Playgroud)

现在让我说我想向这个人插入数据库:

  • 姓:"约翰"
  • 名字:"李四"
  • 属性: 'property_A', 'property_B', 'property_C'

+-----------+-----------+----------+
| person_id | …
Run Code Online (Sandbox Code Playgroud)

mysql many-to-many relationship sql-insert

19
推荐指数
1
解决办法
3万
查看次数

INSERT INTO因node-mysql而失败

我试图用node.js插入一些数据.我已经编写了以下代码并通过npm安装了MySQL支持,但我未能成功INSERT INTO.

这是我的代码:

var mysql = require('mysql');

function BD() {
    var connection = mysql.createConnection({
        user: 'root',
        password: '',
        host: 'localhost',
        port: 3306,
        database: 'nodejs'
    });
    return connection;
}

app.post("/user/create", function(req, res) {
    var objBD = BD();

    var post = {
        username: req.body.username,
        password: req.body.password
    };

    objBD.query('INSERT INTO users VALUES ?', post, function(error) {
        if (error) {
            console.log(error.message);
        } else {
            console.log('success');    
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

HTML代码:

<form action="/user/create" method="POST" class="form-horizontal">
     <input type="text" id="username_input" name="username">
     <input type="text" id="password_input" name="password">
     <input …
Run Code Online (Sandbox Code Playgroud)

mysql node.js sql-insert node-mysql

19
推荐指数
2
解决办法
7万
查看次数

COPY如何工作?为什么它比INSERT快得多?

今天,我花了一天时间来改进我的Python脚本的性能,该脚本将数据推送到我的Postgres数据库中.我以前是这样插入记录的:

query = "INSERT INTO my_table (a,b,c ... ) VALUES (%s, %s, %s ...)";
for d in data:
    cursor.execute(query, d)
Run Code Online (Sandbox Code Playgroud)

然后我重新编写了我的脚本,以便创建一个内存文件,而不是用于Postgres的COPY命令,它允许我将数据从文件复制到我的表:

f = StringIO(my_tsv_string)
cursor.copy_expert("COPY my_table FROM STDIN WITH CSV DELIMITER AS E'\t' ENCODING 'utf-8' QUOTE E'\b' NULL ''", f)
Run Code Online (Sandbox Code Playgroud)

这种COPY方法速度惊人.

METHOD      | TIME (secs)   | # RECORDS
=======================================
COPY_FROM   | 92.998    | 48339
INSERT      | 1011.931  | 48377
Run Code Online (Sandbox Code Playgroud)

但我找不到任何关于为什么的信息?它与多线程的工作方式有何不同INSERT,使其更快?

也看到这个基准:

# original
0.008857011795043945: query_builder_insert
0.0029380321502685547: copy_from_insert

#  10 records …
Run Code Online (Sandbox Code Playgroud)

python postgresql sql-insert postgresql-copy

19
推荐指数
2
解决办法
5423
查看次数

多个UNIQUE字段的ON DUPLICATE KEY UPDATE的MySQL行为

从MySQL 4.1.0开始,ON DUPLICATE KEY UPDATE当插入的值(带INSERTSETVALUES)已经在目标表wrt PRIMARY KEY或某个UNIQUE字段中时,可以添加语句来指定行为.如果PRIMARY KEY某个UNIQUE字段的值已经在表中,INSERT则替换为UPDATE.

  • ON DUPLICATE KEY UPDATE如果UNIQUE我的表中有多个字段,表现 如何?

  • 如果两个UNIQUE字段匹配,我可以只有一个更新吗?

  • 只有当两个UNIQUE字段同时匹配时才能更新吗?

mysql upsert sql-update sql-insert

18
推荐指数
1
解决办法
2万
查看次数

如何在postgresql中将DELETE的返回值插入INSERT?

我试图从一个表中删除一行,并将一些额外的数据插入另一个表.我知道这可以在两个单独的命令中完成,一个用于删除,另一个用于插入新表.但是我试图将它们组合起来并且它不起作用,这是我目前的查询:

insert into b (one,two,num) values delete from a where id = 1 returning one, two, 5;

运行时,我收到以下错误:

错误:"删除"或附近的语法错误

任何人都可以指出如何实现这一目标,还是有更好的方法?还是不可能?

postgresql sql-insert sql-delete

17
推荐指数
2
解决办法
1万
查看次数

Postgres错误:列"id"中的空值 - 在插入操作期间

我使用postgresql和yii2框架.我收到了一条非常有趣的错误消息:

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, 1, null, null, null, null, 1, Demo, , , , 1998-01-01, , , , 345345435453453, , , , , 1, , , f, f, f, f, 10, f, 1, f, f, f, null, null, null, 1470477479, 1470477479, null).
Run Code Online (Sandbox Code Playgroud)

但我检查了我的插入命令,那里没有"id"列!

INSERT INTO "advertiser" ("languages", "type", "name", "display_name", "title", "about", "birthday", "gender", "country_id", "county_id", "city_id", "city_part", "street", "house_number", "phone", "public_email", "public_url", "motto", …
Run Code Online (Sandbox Code Playgroud)

sql postgresql null yii sql-insert

17
推荐指数
4
解决办法
5万
查看次数