不在使用MySQL的特定表中

不在使用MySQL的特定表中,mysql,sql,join,Mysql,Sql,Join,我有两张桌子: 其中一人担任我的成员和 另一个保存帖子的id和用户id以在其页面上隐藏帖子 如何选择除不在隐藏表中的帖子以外的所有帖子 伪语句示例 “从不在(其他表)中的帖子中选择*” 这就是我目前所拥有的 SELECT * FROM `acmPosting` LEFT JOIN `hidePosts` ON acmPosting.id = hidePosts.postID WHERE `sender`='$userID' OR `recip`='$userID' OR `sender` IN

我有两张桌子:

  • 其中一人担任我的成员和

  • 另一个保存帖子的id和用户id以在其页面上隐藏帖子

  • 如何选择除不在隐藏表中的帖子以外的所有帖子

    伪语句示例

    “从不在(其他表)中的帖子中选择*”

    这就是我目前所拥有的

    SELECT * FROM `acmPosting` LEFT JOIN `hidePosts` ON acmPosting.id = hidePosts.postID WHERE `sender`='$userID' OR `recip`='$userID' OR `sender` IN ($friendsArray) OR `recip` IN ($teamsArray) AND hp.id IS NULL ORDER BY `timeSent` DESC LIMIT 10
    

    假设第二个表是postHides,并且两个表都有一个postId列:

    SELECT * FROM posts WHERE postId NOT IN (SELECT postId FROM postHides)
    

    这被称为反连接,使用
    不在
    中时应等效(尽管使用不同的查询计划):


    有关更多信息,请参阅本文:

    假设另一个表名为
    hide\u list
    ,其中
    posts.id
    的外键为
    fk\u post\u id
    。 然后,select语句将是:

    SELECT posts.* from posts,hide_list WHERE NOT posts.id=hide_list.fk_post_id;
    
    更优化的解决方案是:

    SELECT posts.* from posts,(SELECT fk_post_id from hide_list) hide_list WHERE NOT posts.id=hide_list.fk_post_id;
    

    除了不在隐藏表中的帖子以外的所有帖子。。。因此,基本上,隐藏表中的所有帖子?它不应该是
    SELECT*FROM posts WHERE ID NOT in(其他表)吗“
    你忘了写
    ID
    你能分享你的表格结构吗?@MahmoudGamal你为什么要删除你的答案?我只是对这一句话吹毛求疵——这仍然是一个很好的答案。这对我来说似乎是一个很棒的解决方案,但我似乎无法让它发挥作用。这是我在acmPosting.id=hidePosts.posted中从
    acmPosting
    左连接
    hidePosts
    中选择的*,其中
    sender
    ='$userID'或
    recipsender
    在($friendsArray)或
    recip
    在($teamsArray)中而hp.id按
    timeSent
    DESC LIMIT 10的顺序为空,更不用说我在IS NULL字段中使用了快捷方式。现在开始工作了
    SELECT posts.* from posts,hide_list WHERE NOT posts.id=hide_list.fk_post_id;
    
    SELECT posts.* from posts,(SELECT fk_post_id from hide_list) hide_list WHERE NOT posts.id=hide_list.fk_post_id;
    
    "SELECT * FROM posts WHERE post_id NOT IN (select post_id from other_table)"