繁体   English   中英

SQL 内连接限制子查询不影响查询

[英]SQL Inner join with limit on subquery not to affect query

我正在 MySQL 中运行一个查询,其中一个INNER JOIN在子查询上有一个LIMIT

问题是,子查询上的 LIMIT 会影响返回的行数。

我想从表 1( tickets )中选择所有行,其中ticket_updates中的最后一行相关( t.ticketnumber = tu.ticketnumber )在列contact_name不是数字

SELECT t.* 
  FROM tickets t
  JOIN
     ( SELECT ticketnumber 
         FROM ticket_updates 
        WHERE type = 'update' 
          AND concat('', contact_name * 1) <> contact_name 
        ORDER 
           BY sequence DESC 
        LIMIT 1
     ) tu
    ON t.ticketnumber = tu.ticketnumber
 WHERE t.status <> 'Completed' 
   AND LOWER(t.department) = 'support';

但显示的结果只返回 1 行

ticket_updates中有多行与基于 ticket.ticketnumber tickets.ticketnumber = ticket_updates.ticketnumber` 的tickets的每一行相关

contact_name列可以是字符串或整数。 我从另一个 SO Post 中获取了concat('', contact_name * 1) <> contact_name ,它告诉我该值是否为数字。

所以我想搭载了最新的行( ORDER BY sequence DESC中) ticket_updates在每一行tickets ,看是否contact_name是不是数字

您的查询选择一行是因为(正如您自己总结的那样)您的子查询仅限于一个结果。

您想要的可能与此答案中的内容类似(我假设您想要具有最大值的条目sequence ,如果相反,请更改为MIN

使用子查询(应该对引用的答案中最短的更优化查询进行改编,但让我们先看看这个查询是否有效):

SELECT t.*
FROM tickets t
INNER JOIN ( SELECT ticketnumber, MAX(tu.sequence) AS maxSequence
        FROM ticket_updates tu
        WHERE tu.type = 'update' AND concat('', tu.contact_name * 1) <> tu.contact_name
        GROUP BY ticketnumber ) tu2
    ON (t.ticketnumber = tu2.ticketnumber)
WHERE t.status <> 'Completed' 
AND LOWER(t.department) = 'support';

看到它在行动

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM