MariaDB:从一个表中的一列中选择不在另一个表

时间:2016-05-07 03:26:08

标签: mysql sql mariadb

更新:请勿提供使用NOT EXISTS的答案。根据{{​​3}}“在MariaDB中使用EXISTS条件的SQL语句非常低效,因为子查询对于外部查询表中的每一行都是RE-RUN。”此查询将使用 很多 ,因此需要高效。

我有两张表following

CREATE TABLE `following` (
 `follower` int(1) unsigned NOT NULL,
 `followee` int(1) unsigned NOT NULL,
 PRIMARY KEY (`follower`,`followee`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

association_record

CREATE TABLE `association_record` (
 `user_id` int(1) unsigned NOT NULL,
 `post_id` int(1) unsigned NOT NULL,
 `answer_id` int(1) unsigned NOT NULL,
 `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`user_id`,`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我想要的是follower'5'的followeeassociation_record没有帖子'88'的select f.follower from following f left outer join association_record a on f.follower = a.user_id where f.followee = 5 and a.post_id = 88 and a.user_id is null 。下面的SQL是我从阅读其他帖子中得到的,但它没有得到我想要的结果:

app.service('selectedEmployee', [selectedEmployeeService])

    function selectedEmployeeService(){
      this.selected = null;
      this.getSelected = function(){
        return this.selected;
      }
      this.postSelected = function(emp){
        this.selected = emp;
      }
    }

4 个答案:

答案 0 :(得分:1)

select f.follower from following f, response_record r where f.follower = r.user_id and f.followee = 5 and r.post_id = 88 and r.user_id is null

试试这个

答案 1 :(得分:0)

为了简化操作,最好一步一步地开始。

因此,我们需要关注用户' 5的人这是查询。

select follower from following where followee = 5;

现在我们需要知道用户在帖子' 88'

上有记录。

select user_id from association_record where post_id=88;

现在我们需要以某种方式修复这两个查询。我们来做吧:

select follower from following where followee = 5 and not exists (select user_id from association_record where post_id=88 and user_id=follower);

就是这样。在这里您解释了您的查询。

答案 2 :(得分:0)

方法2:使用连接

SELECT follower
FROM following, association_record
WHERE follower=user_id
  AND followee = 5
  AND post_id=88
  AND user_id = null;

有些SQL引擎使用!=而有些使用<&gt ;.如果遇到麻烦,请尝试两种方法。

答案 3 :(得分:0)

以下是执行此操作的查询:

SELECT f.follower
FROM following f
LEFT OUTER JOIN association_record a
ON f.follower = a.user_id
AND a.poll_id = 88
WHERE f.followee = 5
AND a.user_id is null

在我解决之后忘了将解决方案发布到我的问题,现在一个月后,我最终遇到了类似的问题,但没有提到原始解决方案;不再需要它了。

几乎不得不从头再次解决整个问题;这本来很难,因为我从未理解解决方案的工作原理。幸运的是,MySQL工作台会记录从中运行的所有查询,并且尝试查询来回答这个问题是我用过的几次之一。

故事的道德,不要忘记发布你的解决方案;你可能是为自己做的。