【问题标题】:MySQL Select statement Where table1.id != table2.idMySQL Select 语句 Where table1.id != table2.id
【发布时间】:2011-02-07 21:03:43
【问题描述】:

我有一个包含帖子的数据表,然后我有一个单独的数据表,其中删除了帖子。当一个帖子被删除时,它的 ID 被添加到已删除的表中,而不是删除帖子条目。

什么是从帖子表中选择所有帖子而不选择在已删除表中具有其 ID 的帖子的一种干净有效的方法

【问题讨论】:

    标签: php mysql select join


    【解决方案1】:

    在您的帖子表中添加一个额外的列并存储和删除的布尔值不是更容易吗?或者如果你想存储谁删除它,可以使用一个整数字段(代表用户ID),0 = 未删除。

    【讨论】:

    • 那会更容易,但这是针对我没有设计的第 3 方基础架构,我无法更改它的核心结构。
    【解决方案2】:

    如果您有充分的理由不使用 bigstylee 建议的布尔标志,则可以使用 EXISTS 子查询:

    SELECT * FROM table1 
      WHERE NOT EXISTS 
      (SELECT * FROM table2 WHERE table1.id=table2.id);
    

    【讨论】:

    • 这会起作用,但是一个简单的左连接比做一个子选择要容易得多。
    • 我不同意。这对我来说似乎更清晰易读,因为它实际上说明了你在做什么。在这个简单的例子中,Mysql 将对其进行同样的优化..
    【解决方案3】:

    如果您无法更改您的表格,您可以执行Left Join(如果可能,它将加入您的deleted_table),然后检查id 是否为Null(意味着没有行已找到)。

    Select everything_you_need
    From post_table p
    Left Join delete_table d On ( d.id = p.id )
    Where d.id Is Null;
    

    确保在两个id-列上都有索引以获得最佳性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-20
      • 2015-01-26
      • 2014-06-17
      • 1970-01-01
      • 2018-12-04
      • 2014-01-20
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多