[英]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.