我正在使用INNER JOIN
在MySQL中运行查询,该查询在子查询上具有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_updates.ticketnumber`
tickets
中有多行与tickets.ticketnumber =
中的每一行相关
contact_name
列可以是字符串或整数。我从另一个SO Post上捡起concat('', contact_name * 1) <> contact_name
,告诉我该值是否为数字。
所以我想为ORDER BY sequence DESC
中的每一行选择ticket_updates
中的最新行(tickets
),并查看contact_name
是否不是数字
答案 0 :(得分:-1)
您的查询选择一行,因为(您自己得出结论)子查询仅限于一个结果。
您想要的内容可能类似于在this answer中可以找到的内容(我假设您想要具有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';