Mysql 在sql语句的部分使用if计数

Mysql 在sql语句的部分使用if计数,mysql,sql,Mysql,Sql,我想过滤掉最后一条查询语句中的结果,其中 SELECT * FROM messages WHERE (messages.to = 'Jack' AND (type = 'message' OR type = 'reply')) OR (messages.from = 'Jack' AND type = 'reply') OR (messages.from = 'Jack' AND type = 'message') ORDER BY message

我想过滤掉最后一条查询语句中的结果,其中

SELECT 
    *
FROM
    messages
WHERE
       (messages.to = 'Jack' AND (type = 'message' OR type = 'reply'))
    OR (messages.from = 'Jack' AND type = 'reply')
    OR (messages.from = 'Jack' AND type = 'message')
ORDER BY messages.message_id DESC , messages.id DESC

如果它的计数等于1。

使用子查询,我会这样做来代替上一个条件:

SELECT 
    *
FROM
    messages
WHERE
       (messages.to = 'Jack' AND (type = 'message' OR type = 'reply'))
    OR (messages.from = 'Jack' AND type = 'reply')
    OR (messages.from = 'Jack' AND type = 'message')
ORDER BY messages.message_id DESC , messages.id DESC
(messages.from='Jack' AND type='message') 
因此,最终的SQL应该是:

SELECT 
    *
FROM
    messages
WHERE
       (messages.to = 'Jack' AND (type = 'message' OR type = 'reply'))
    OR (messages.from = 'Jack' AND type = 'reply')
    OR (messages.from = 'Jack' AND type = 'message')
ORDER BY messages.message_id DESC , messages.id DESC
messages.from = 'Jack' AND 
type = 'message' AND 
1 =(select count(primary_key) from messages /* 1=count : this would ensure that 
                                               condition works only if 
                                               1 row is returned*/
where (messages.from='Jack' AND type='message')  )

算什么?where子句中的条件适用于单个记录,因此“its”计数始终为1。计数(主键)
count(主键)
的含义仅用于演示,请将其替换为表中的属性
primary\u key
,它将计算返回的行数,并将其与
1
进行比较。我有多条具有相同id的消息(如问答)。在您的情况下,查询将统计表中的所有消息,而不是每个消息id。我需要每个消息id的计数,以便获得每个id的列表,该计数不等于1。在这种情况下,您可以使用子查询中的
distinct
:)选择