簡體   English   中英

如何在jpa和jpql中加入多個表列

[英]How can I JOIN multiple table columns in jpa and jpql

我是JPA和JPQL的新手。 我正在嘗試從一個表中查詢數據庫抓取行,該表主要包含其他表中包含的名稱的索引。

這是我要重新創建的mysql中的查詢:

SELECT COUNT(*) as PieceCount, 
                  shifttimes.shiftid as ShiftId, 
                  specienames.NameText as SpecieName, 
                  gradenames.NameText as Grade, 
                  DryerNum, 
                  CreatedLocal      
                  from sheets, shifttimes, specienames, gradenames  
                  WHERE sheets.ShiftIndex = shifttimes.ShiftIndex AND 
                  sheets.SpecieNameIndex = specienames.NameIndex AND
                  sheets.gradenameindex = gradenames.NameIndex AND  
                  CreatedLocal >= '" . $begin . $StartGraveyard  
                  ' AND CreatedLocal < '" . $end . $StartGraveyard 
                  GROUP BY ShiftId, SpecieName, Grade, DryerNum;

這是我所查詢到的查詢:

SELECT COUNT(s.createdLocal), 
                g.nameText gName,
                p.nameText pName 
                FROM Sheets s , GradeNames g , SpecieNames p 
                JOIN s.gradeNameIndex gIndex , 
                JOIN s.specieNameIndex pIndex
                 WHERE gIndex = g.nameIndex AND 
               pIndex = p.nameIndex
                 GROUP BY gName , pName

這是我收到的Java Glassfish錯誤:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [SELECT COUNT(s.createdLocal), g.nameText, p.nameText FROM Sheets s , GradeNames g , SpecieNames p JOIN s.gradeNameIndex gIndex , JOIN s.specieNameIndex pIndex WHERE gIndex = g.nameIndex AND pIndex = p.nameIndex GROUP BY g.nameText , p.nameText]. 
[128, 128] The range variable declaration must be specified.

首先,很抱歉,但這不是答案,而是大評論...

您最好停止在FROM Sheets s , GradeNames g , SpecieNames p使用此語法。

您需要的所有表都應通過ON子句正確地JOIN

任何JOIN語句應該具有ON子句,不應該有,結尾處的逗號。

如果我正確理解了您的第二個查詢,則必須類似:

SELECT COUNT(s.createdLocal), 
   g.nameText gName,
   p.nameText pName 
FROM Sheets s 
JOIN GradeNames g
ON s.gradeNameIndex  = g.nameIndex 
JOIN SpecieNames p 
ON s.specieNameIndex = p.nameIndex
GROUP BY gName , pName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM