由于某种原因,MYSQL在子查询中不支持LIMIT:
SELECT m.*
FROM `my_table` m
WHERE m.`id` IN (
SELECT o.`id`
FROM (SELECT DISTINCT i.`id`, i.`label`, i.`client`, i.`place`
FROM `my_table` i
ORDER BY i.`label`, -i.`client` DESC, -i.`place` DESC) o
WHERE m.`label` = o.`label` LIMIT 1
);
我尝试通过以下链接使用联接:INNER JOIN INSTEAD OF IN(LIMIT error),但未成功。有任何线索吗?谢谢。
答案 0 :(得分:1)
由于子查询仅返回1行和1列,因此不需要IN
。
您可以使用=
:
SELECT m.*
FROM `my_table` m
WHERE m.`id` = (
SELECT o.`id`
FROM (
SELECT DISTINCT i.`id`, i.`label`, i.`client`, i.`place`
FROM `my_table` i
ORDER BY i.`label`, -i.`client` DESC, -i.`place` DESC) o
WHERE m.`label` = o.`label` LIMIT 1
);
但是在编写时,您的查询使用LIMIT
而不使用ORDER BY
(在内部子查询中确实使用ORDER BY
,这是没有用的)。
您是说要做这样的事情吗?
SELECT m.*
FROM `my_table` m
WHERE m.`id` = (
SELECT o.`id`
FROM (
SELECT DISTINCT i.`id`, i.`label`, i.`client`, i.`place`
FROM `my_table` i
) o
WHERE m.`label` = o.`label`
ORDER BY o.`label`, -o.`client` DESC, -o.`place` DESC
LIMIT 1
);
按列的负值降序排序也等同于按升序排序,因此ORDER BY
子句可以简化为:
ORDER BY o.`label`, o.`client`, o.`place`