SQL查询加入并验证是否没有相应的行

时间:2017-09-28 19:46:46

标签: mysql sql

我目前正在进行此查询,但是,我总是得到一个应该没有的结果,因为那里有相应的行。

select `likes`.*, `likeshistory`.`like_id`, `likeshistory`.`instagram_id` from `likes` join `likeshistory` on `likes`.`id` = `likeshistory`.`like_id` where (`finished` = '0' and `active` = '1' and `banned` = '0') and `instagram_id` not in ('2') limit 1

基本上我想选择一个"喜欢"没有"喜欢历史" for(instagram_id = 2)

likeshistory structure

谢谢! 威廉

1 个答案:

答案 0 :(得分:0)

您可以使用not exists。查询的目的更明确:

select `likes`.*, `likeshistory`.`like_id`, `likeshistory`.`instagram_id`
from `likes` l
where not exists (select 1
                  from `likeshistory` lh
                  where l.id = lh.`like_id` and
                        (`finished` = '0' and `active` = '1' and `banned` = '0') and lh.instagram_id not in ('2')
                 );

如果子查询中的任何条件(相关子句除外)都在likes上,那么这些条件应该在外部查询中。