2016-10-03 69 views
1

MEMSQL!我想刪除表中有多個字段上的另一個表中匹配的記錄。這可能嗎?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 。

我可以在刪除where子句中使用多個條件而不使用concat等嗎?

P.S.對不起,我糟糕的英國

+1

可能的[複製] [1] [1]:http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server –

回答

1

嘗試這樣:

delete from t1 where exists (select 1 from t2 where t1.f1=t2.f1 and t1.f2=t2.f2) 
+0

Thx的答案!對於選擇它的工作。但刪除有錯誤 「'相關子選擇無法轉換且不匹配分片鍵'不支持memsql分佈式」 –

+0

如果連接是交叉分片,MemSQL對這些查詢形狀的支持有限。如果你可以讓t1和t2的分片鍵包含(f1,f2),那麼它應該可以工作。另一種解決方案是將t1和t2中的任一個作爲參考表。 –

0

我有同樣的問題,試圖更新來自其它表的表的一些字段。

的問題是,不能轉化和不匹配碎片鍵由MemSQL分佈式不支持相關子查詢 所以我的解決辦法是創建生成更新查詢,然後將選擇查詢運行它們。下面是一個簡化的發電機查詢:

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限制的解決方法。