这是sql语句:
UPDATE
(SELECT table1.nbqe as OLD_nbqe, table2.nbqe as NEW_nbqe,
table1.adr1 as OLD_adr1, table2.adr1 as NEW_adr1
table1.adr3 as OLD_adr3, table2.adr2 as NEW_adr3
FROM table1
INNER JOIN table2
ON table1.cg= table2.cg AND table1.ce = table2.ce
) t
SET t.OLD_nbqe = t.NEW_nbqe, t.OLD_adr1 = t.NEW_adr1, t.OLD_adr3 = t.NEW_adr3
发生01779错误:无法修改映射到非密钥保留表的列
如何修改sql语句以实现操作?
泰
注意:这个问题没有重复
table1 columns :
nbqe
adr1
adr2
adr3
cg
ce
table2 column :
nbqe
adr1
adr2
cg
ce
表2中的,cg + ce是单个键
在表1中,您可以使用相同的一对(cg,ce)创建多个记录。没有这些表的约束,甚至没有主键或任何东西。
我会以不同的方式问它。 sql语句可能不对。
更新内部的select返回表1的8行,应该使用table表中可以找到的table2值进行修改。
如何使用表t更新8行sof table1与table2的相应值:是可能的还是我应该写一个大的sql语句,一直重复相同的子查询,这看起来很奇怪而且不干净
答案 0 :(得分:2)
如果table2
对应table1
的行不超过一行,请使用merge
:
merge into table1 d
using table2 s
on (d.cg = s.cg and d.ce = s.ce)
when matched then update set
d.nbqe = s.nbqe, d.adr1 = s.adr1, d.adr3 = s.adr3
只会更新匹配的行,其余的保持不变。您可以使用update
执行此操作,但这样可以避免重复where
子句的条件。
测试:
create table table1 (nbqe int, adr1 int, adr2 int, adr3 int, cg int, ce int);
create table table2 (nbqe int, adr1 int, adr2 int, adr3 int, cg int, ce int);
insert into table1 values (1, 1, 1, 1, 1, 1);
insert into table1 values (2, 2, 2, 2, 2, 2);
insert into table1 values (3, 3, 3, 3, 2, 2);
insert into table2 values (5, 5, 5, 5, 2, 2);
结果:
NBQE ADR1 ADR2 ADR3 CG CE
---- ---- ---- ---- ---- ----
1 1 1 1 1 1
5 5 2 5 2 2
5 5 3 5 2 2
答案 1 :(得分:0)
应该是这样的:
$terms = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => true,
'number'=>5,
'orderby'=>'count',
'order' =>'DESC',
'meta_query' => array(
array(
'key' => 'tag',
'value' => 10,
'compare' => 'LIKE',
),
),
) );
你也没有在你的选择中提供where子句,所以所有成功加入的行都会被更新,这就是你想要的吗?