【发布时间】:2013-04-15 04:56:12
【问题描述】:
我正在使用 JSF 2 做一个项目,并且我有一个特别复杂的查询来提供电影建议。我试图把它作为一个命名查询,编译器告诉我有一个错误,老实说我不知道在哪里看
SELECT M.*
FROM Account A,
Movie M,
Orders O,
Rental R,
(SELECT Acc.Id
FROM Account Acc,
(SELECT COUNT(*) AS c,
Acc.Id
FROM Account Acc,
(SELECT M.*
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=:id) AS a
INNER JOIN
(SELECT M.*,
A.Id AS AccountId
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id<>:id) AS b USING (Id,Name,TYPE,Rating,DistrFee,NumCopies)
WHERE Acc.Id = b.AccountId ) AS COUNT
WHERE COUNT.c>0
AND COUNT.Id = Acc.Id) AS SimilarAccount
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=:id
AND M.Id NOT IN
(SELECT M.Id
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=SimilarAccount.Id)
抛开性能问题(教授希望通过 MySQL 完成电影建议),我不确定存储此查询以供重复使用的过程。我会将查询存储为视图,但它有一个参数(它需要用户的参数 id)
您建议如何存储此查询?
【问题讨论】:
-
也许是
View?不...有参数。存储过程,否则。 -
"AND A.Id=:id"
-
:id 是一个参数。这些是 JPA 中 NamedQueries 的正常语法。我通过将其转换为存储过程并通过 NativeQuery 调用该过程来使其工作。不过,如果有人有更好的主意,我会留下这个问题。
标签: mysql sql named-query