使用mysql 5,因为gcloud只支持。。。
我试图从查询中筛选出具有重复文本列的标记,并找到了一种方法,使用row\u number()和over()子句来选择具有重复文本的标记的第一个(按id)标记,但由于mysql 5中不存在over,因此出现语法错误。
SELECT
c.*,
CONCAT('[',
GROUP_CONCAT(CONCAT('{"id":',
t.id,
', "company_id":',
t.company_id,
', "client_id":',
t.client_id,
', "user_id":',
t.user_id,
', "text":"',
t.text,
'", "color":"',
t.color,
'"}')
ORDER BY t.id),
']') AS tags
FROM
company_users AS cu
LEFT JOIN
companies AS c ON cu.company_id = c.id
LEFT JOIN
(SELECT t.*, ROW_NUMBER() OVER(PARTITION BY `text` ORDER BY `id` ASC) AS tagnum
FROM client_tags AS t
) t ON c.id = t.company_id AND tagnum = 1
WHERE
# temp
cu.user_id = 1
GROUP BY c.id;
还有什么我可以用的吗?我甚至不知道这个方法是否有效,因为我无法运行它。
1条答案
按热度按时间dy2hfwbg1#
可以使用相关子查询来获取具有最小
id
:请注意,相关子查询需要在
ON
子句,因为这是一个LEFT JOIN
.