以下是简化的等效值:
表:用户日志
字段:log\u id、user\u id、log\u comment、log\u created、log\u updated
我尝试的是:
SELECT * FROM user_log
WHERE user_id = 123
AND log_comment = "The one I want"
AND NOT log_comment = "The one I don't want"
期望的结果:理想情况下,我希望它返回表中该用户id的所有记录,如果它包含“我不想要的那个”的注解,则完全不返回任何记录。
实际结果:不起作用。它所做的是返回带有注解“我想要的那个”的记录。
抱歉,如果标题不清楚,我不知道如何描述我的问题。
5条答案
按热度按时间6rvt4ljy1#
您可以使用基于条件聚合函数的筛选
Group By
以及Having
条款。在派生表中,我们可以确定user_id = 123
和你有什么争执吗log_comment = "The one I don't want"
.HAVING NOT SUM(log_comment = "The one I don't want")
确保用户id不存在这样的行。现在,只需将这个派生表结果集连接到
user_log
表,只获取log_comment = "The one I want"
.如果有一行用户id为“我不想要的”;此查询不会返回任何单行。
将条件聚合与分组依据一起使用:
368yc8dk2#
我会用
NOT EXISTS
:swvgeqrz3#
我会用
exists
以及not exists
:brc7rcf04#
我不确定我是否理解这个问题,但这是否有效:
8ehkhllq5#
当我读到你的描述时,这里有一些
log_comment
“嘿,我想要的那个——是的!”—抓住这个“嘿,我想要的那个——是的,我想要的那个”——抓住这个
“嘿,我不想要的那个——是的!”—跳过这个
“嘿,我想要的那个。哦,等等,我不想要的那个”--跳过这个
“我不想要的那个哦,等等——我想要的那个”——也跳过了
如果这些不是正确的结果,那么用一组例子来澄清你的问题。