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
:)选择