MEMSQL!我想删除一个表中的记录,该表在多个字段的另一个表中具有匹配项。这可能吗?
我将使用的MySql查询可能是:
delete from t1 used t1,t2 where t1.f1=t2.f1 and t1.f2=t2.f2
或
delete t1 from t1,t2 where...
根据http://docs.memsql.com/docs/delete:
MemSQL尚未完全支持多表DELETE语句。 WHERE子句中的子查询是唯一的多表DELETE 允许的。
我可以在delete where子句中使用多个条件而不使用concat等吗?
P.S。抱歉我的英语很糟糕
答案 0 :(得分:1)
尝试这样的事情:
delete from t1 where exists (select 1 from t2 where t1.f1=t2.f1 and t1.f2=t2.f2)
答案 1 :(得分:0)
尝试从另一个表更新表的某些字段时遇到了同样的问题。
问题在于 无法转换且与分片键不匹配的相关子选择' MemSQL Distributed 不支持 所以我的解决方案是创建一个选择查询,生成更新查询,然后运行它们。这是一个简化的生成器查询:
select concat('update table1 set t1_code=\'',t2_code,
'\',t1_url=\'',t2_url,
'\',t1_width=\'',t2_width,
'\' where t1.id=',t2.id,';') query
from t1
inner join t2 on t2.id=t1.id;
为需要以;
分隔的更新的每一行生成更新查询。
生成删除会更加轻松 - 您只需选择要删除的ID并生成查询delete from t1 where id in (-the list of ids that was selected for deletion-)
这是我对此memsql限制的解决方法。