【发布时间】:2014-04-25 14:59:44
【问题描述】:
我加入了一份新工作,需要使用 FileMaker(并逐渐将系统过渡到其他数据库)。我担任 MS SQL Server 数据库的 DB Admin 已有约 2 年了,我非常精通 PL/SQL 和 T-SQL。我正在尝试使用 ExecuteSQL 功能将我的 SQL 知识平移到 FMP,但我遇到了很多小麻烦 :)
我有 2 个表格:电影和流派。相关栏目是:
电影(MovieId、MovieName、GenreId、评级)
流派(流派 ID,流派名称) 我正在尝试找到每种类型中评分最高的电影。对此的 SQL 查询将是:
SELECT M.MovieName
FROM Movies M INNER JOIN Genres G ON M.GenreId=G.GenreId
WHERE M.Rating=
(
SELECT MAX(Rating) FROM Movies WHERE GenreId = M.GenreId
)
我尽我所能把它翻译成一个 ExecuteSQL 查询:
ExecuteSQL ("
SELECT M::MovieName FROM Movies M INNER JOIN Genres G ON M::GenreId=G::GenreId
WHERE M::Rating =
(SELECT MAX(M2::Rating) FROM Movies M2 WHERE M2::GenreId = M::GenreId)
"; "" ; "")
我将字段类型设置为文本,并确保不存储值。但我看到的只是'?分数。
我在这里做错了什么?如果这真的很愚蠢,我很抱歉,但我是 FMP 的新手,任何建议都将不胜感激。
谢谢!
-- 拉姆
更新:解决方案和实现目标所需的思考过程:
感谢所有帮助我解决问题的人。你们让我意识到,传统的 SQL 思维过程并不完全适用于 FMP,当我四处探索时,我意识到要在 FMP 中最好地利用 SQL 知识,我应该独立考虑每一列,而不是考虑整个结果在我编写查询时设置。这意味着对于我当前的功能,不再需要 JOIN。 JOIN 是为了引入 GenreName,这是 FMP 自动映射的不同列。我只需要删除 JOIN,它就可以完美运行。 TL;DR:思考过程上下文应该是当前列,而不是整个预期结果集。
再次感谢@MissJack、@Chuck(你是怎么得到那个用户名的?)、@pft221 和@michael.hor257k
【问题讨论】:
标签: sql filemaker correlated-subquery