簡體   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