通过与其他表配对删除和查找记录mysql表

时间:2018-11-01 14:25:19

标签: mysql

我可以使用

从产品表中轻松地在icecat_cache中搜索单个值。
'NSInvalidArgumentException', reason: '*** -bytes only defined for abstract class.  Define -[MusicSync.ChatMessage bytes]!'

然后将其删除

但是我无法弄清楚如何找到产品表中不存在的值并将其从icecat_cache中删除。

icecat_cache表看起来像这样

SELECT * FROM `icecat_cache` WHERE `ident` LIKE '%FAN8X25TX3L%' 

产品表看起来很像

     ident                          |  status
    ----------------------------------------------
        StarTech.com_FAN8X25TX3L    |    1
--------------------------------------------------
        hp_Fr4567                   |    1
-------------------------------------------------
        samsung_d345674             |    1
-------------------------------------------------
        hp_ser345                   |    1
------------------------------------------------
        toshiba_dff345              |    1
------------------------------------------------
        hp_se3453                   |    1
------------------------------------------------

从上面的示例d345674中可以看到,dff345和ser345不在产品表中退出。目前,icecat_cache有超过50万个商品,而产品表只有18万个。

什么是删除它们的最佳方法

1 个答案:

答案 0 :(得分:0)

  • 在两个表之间执行Left Join。考虑要考虑其中的所有行,请将icecat_cache视为最左侧的表。
  • 在加入条件下,您可以指定LIKE %..%规则。
  • 现在,使用Product,仅考虑Where Product.model IS NULL表中没有匹配条目的那些行
  • 通过在icecat_cache子句中仅指定其名称/别名,可以从Delete表中仅删除

尝试以下查询:

DELETE 
  ic
FROM icecat_cache AS ic 
LEFT JOIN Product AS p ON ic.ident LIKE CONCAT('%',p.model,'%')
WHERE p.model IS NULL