使用mysql 5,因为gcloud仅支持...
我正在尝试从查询中过滤出带有重复的 text 列的标签,并找到了一种使用ROW_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;
还有其他我可以使用的东西吗?我什至不知道此方法是否可以工作,因为我无法运行它。
答案 0 :(得分:0)
您可以使用相关子查询来获取具有最小id
的匹配项:
SELECT . . .
FROM company_users cu LEFT JOIN
companies c
ON cu.company_id = c.id LEFT JOIN
client_tags t
ON t.company_id = c.id AND
t.id = (SELECT MIN(t2.id)
FROM client_tags t2
WHERE t2.text = t.text
)
WHERE cu.user_id = 1
请注意,相关子查询需要进入ON
子句,因为这是LEFT JOIN
。