MySQL:忽略错误(#1054)并仅设置现有列

时间:2016-11-21 20:44:34

标签: mysql mysql-error-1054

Kontext:

我有一个将源数据库表垂直拆分为两个分区的程序:

来源:

id | col1 | col2
1  | v1_1 | v1_2
2  | v2_1 | v2_2

分区#1:

id | col1
1  | v1_1
2  | v2_1

分区#2:

id | col2
1  | v1_2
2  | v2_2

对于客户端/用户,它应该总是看起来只有一个表。当他选择所有数据时,应用程序将分区合并到一个表中。

架构:

Client <--> Server <--> Databases (MySQL)

客户端将参数发送到服务器。服务器在DBMS上创建并执行MySQL查询并返回结果(取决于操作/查询)。

更新操作问题:

客户端使用更新的数据向HTTP服务器发送请求:

HTTP1.1 | PUT
body: {
    db:'Partition_1',
    table: 'test_table',
    data: [
        {id:1, col1:'w1_1', col2:'w1_2'}
    ]
}

服务器创建以下语句:

UPDATE 'Partition_1'.'test_table' SET col1='w1_1' AND col2='w1_2';

这将导致错误#1054,因为第一个分区不知道列'col2'! (而第二个分区不知道'col1')

我不想在请求中添加参数。 有没有办法忽略错误并只设置现有列?

( - &gt;这应该更新第一个分区。将为第二个分区发送类似的请求。)

3 个答案:

答案 0 :(得分:0)

您可以使用const oneDeg = Math.PI/180;查询更新两个列,例如:

join

此处 expanded logs

答案 1 :(得分:0)

使用x %>% group_by(id) %>% summarize( value = sum(value[key == 'total']) - sum(value[key %in% c('a', 'b')]), key = 'n' ) %>% bind_rows(x) %>% select(id, key, value) %>% # back to original column order arrange(id, key) # and a start a row order # # A tibble: 9 × 3 # id key value # <dbl> <chr> <dbl> # 1 1 a 1 # 2 1 b 2 # 3 1 n 7 # 4 1 total 10 # 5 2 a 4 # 6 2 b 3 # 7 2 n 5 # 8 2 total 12 # 9 2 x 1 将列过滤为该服务器上存在的列。以下查询将告诉您哪些列有效:

INFORMATION_SCHEMA.COLUMNS

然后,您可以使用此结果在SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'Partition_1' AND table_name = 'test_table' AND column_name IN ('col1', 'col2'); 查询中构建分配。

顺便说一句,要分配给多个列,请将其与UPDATE分开,而不是,

AND

答案 2 :(得分:0)

谢谢你的帮助......

我通过更改请求的参数来解决它。客户端现在只发送表中包含的列的值。

我没有更改服务器,因为他不应该知道数据库的数据模型。