【问题标题】:DELETE FROM table WHERE condition is met in other tableDELETE FROM table WHERE 条件在其他表中满足
【发布时间】:2017-08-05 20:04:35
【问题描述】:

我有这个运行良好的 SQL 查询。当IM_ITEM 中的DESCR 列以Clearance 开头而不是ITEM_VEND_NO = 'GAMES WORK' 开头时,我想要类似的东西会从PRC_FIX 中删除一行。

DELETE `PRC_FIX` FROM `PRC_FIX` 
INNER JOIN `IM_ITEM` ON `IM_ITEM`.`ITEM_NO` = `PRC_FIX`.`ITEM_NO` 
                     AND `IM_ITEM`.`ITEM_VEND_NO` = 'GAMES WORK'

感谢您的帮助。

编辑:这被标记为可能重复。我不知道查看建议的副本会对我有所帮助,因为我不知道如何在涉及 2 个表的场景中实现它,但我愿意承认这可能是我的错,因为我是新手到 SQL。

【问题讨论】:

  • AND IM_ITEM.DESCR LIKE 'Clearance%'
  • 顺便说一句,与两个表不相关的条件通常应该在 WHERE 子句中,而不是 ON (外连接除外)。
  • 感谢@Barmar 的提示。我对 SQL 还是很陌生,并且得到了这个查询。

标签: mysql sql


【解决方案1】:

你可以使用

DELETE PRC_FIX
  FROM PRC_FIX
 INNER JOIN IM_ITEM
    ON IM_ITEM.ITEM_NO = PRC_FIX.ITEM_NO
 WHERE UPPER(IM_ITEM.DESCR) LIKE 'CLEARANCE%';

【讨论】:

    【解决方案2】:

    您需要使用通配符 %。

    为了与此字符串匹配以“Clearance”开头的不同字符串,您需要使用“Clearance%”。

    看这里:SQL like search string starts with

    你的代码是固定的:

     DELETE `PRC_FIX` FROM `PRC_FIX` 
        INNER JOIN `IM_ITEM` ON `IM_ITEM`.`ITEM_NO` = `PRC_FIX`.`ITEM_NO` 
                             AND IM_ITEM.DESCR LIKE 'Clearance%'
    

    【讨论】:

      【解决方案3】:
      DETELE FROM PRC_FIX WHERE ITEM_NO IN (SELECT ITEM_NO FROM IM_ITEM WHERE ITEM_VEND_NO` = 'GAMES WORK')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-15
        • 2012-08-08
        • 1970-01-01
        • 2010-12-31
        • 2017-02-25
        • 1970-01-01
        • 2012-06-23
        • 2021-09-15
        相关资源
        最近更新 更多