我在将一段 MySQL 代码转换为 Access 时遇到了很大的困难。 我正在尝试将 Sakila (MySQL) 数据库中找到的查询之一用于我正在处理的 Access 项目。
首先,GROUP_CONCAT函数根本不起作用。经过一番 Google 搜索后,我发现 Access 不支持此功能,但我找不到可行的替代方案。然而 CONCAT 可以被一些“+”运算符取代。
然后是三重 LEFT JOIN,它不断返回缺少运算符的错误。我发现一篇博客文章解释了一系列括号如何提供帮助,但这导致了更多麻烦,并促使我删除了括号,之后它引发了更多丢失的运算符错误。
此外,SEPARATOR 似乎也不被接受,但这可能是由于 GROUP_CONCAT 不起作用。
有人愿意引导我走向正确的方向吗?我已经为此苦苦挣扎太久了。
SELECT
a.actor_id,
a.first_name,
a.last_name,
GROUP_CONCAT(DISTINCT CONCAT(c.name, ': ',
(SELECT GROUP_CONCAT(f.title ORDER BY f.title SEPARATOR ', ')
FROM film f
INNER JOIN film_category fc
ON f.film_id = fc.film_id
INNER JOIN film_actor fa
ON f.film_id = fa.film_id
WHERE fc.category_id = c.category_id
AND fa.actor_id = a.actor_id
)
)
ORDER BY c.name SEPARATOR '; ')
AS film_info
FROM
actor AS a
LEFT JOIN film_actor AS fa ON a.actor_id = fa.actor_id
LEFT JOIN film_category AS fc ON fa.film_id = fc.film_id
LEFT JOIN category AS c ON fc.category_id = c.category_id
GROUP BY a.actor_id, a.first_name, a.last_name
最佳答案
最常被引用的 MySQL GROUP_CONCAT()
函数的 Access 替代方法是 Allen Browne 的 ConcatRelated()
函数,可用 here .
对于 JOIN 周围的括号,是的,Access SQL 对它们很挑剔。而不是
FROM
actor AS a
LEFT JOIN film_actor AS fa ON a.actor_id = fa.actor_id
LEFT JOIN film_category AS fc ON fa.film_id = fc.film_id
LEFT JOIN category AS c ON fc.category_id = c.category_id
尝试
FROM
(
(
actor AS a
LEFT JOIN
film_actor AS fa
ON a.actor_id = fa.actor_id
)
LEFT JOIN
film_category AS fc
ON fa.film_id = fc.film_id
)
LEFT JOIN
category AS c
ON fc.category_id = c.category_id
关于mysql - 将 MySQL 代码转换为 Access : GROUP_CONCAT and a triple JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478272/