更新:请勿提供使用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'的followee
个association_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;
}
}
答案 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工作台会记录从中运行的所有查询,并且尝试查询来回答这个问题是我用过的几次之一。
故事的道德,不要忘记发布你的解决方案;你可能是为自己做的。