Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql HQL具有3个表的联接和where条件_Mysql_Sql_Hibernate_Hql - Fatal编程技术网

Mysql HQL具有3个表的联接和where条件

Mysql HQL具有3个表的联接和where条件,mysql,sql,hibernate,hql,Mysql,Sql,Hibernate,Hql,我们有一个生成HQL的报告,其中两个表之间的连接工作正常。但是随着DB设计的改变,我们现在需要对3个表做同样的事情。但是我没有得到想要的结果 之前,所有用户在系统中都有一个角色,该角色是用户表的一部分。在这种情况下,以下HQL工作正常 <![CDATA[SELECT new com.test.reportsmodel.agentReport(u, COUNT( t.transactionId ), SUM(CASE WHEN t.sta

我们有一个生成HQL的报告,其中两个表之间的连接工作正常。但是随着DB设计的改变,我们现在需要对3个表做同样的事情。但是我没有得到想要的结果

之前,所有用户在系统中都有一个角色,该角色是用户表的一部分。在这种情况下,以下HQL工作正常

<![CDATA[SELECT new com.test.reportsmodel.agentReport(u, 
            COUNT( t.transactionId ), SUM(CASE 
            WHEN  t.status =  'CREATED' THEN 1 
            WHEN  t.status =  'PAID' THEN 1 
            WHEN  t.status =  'DELIVERED' THEN 1 
            ELSE 0 END )) 
            FROM User AS u
            LEFT JOIN u.transactionsForAgent t WITH  
            (t.invoiceDate BETWEEN :startDate AND :endDate)
            WHERE u.role = 'EXTERNALAGENT'
            GROUP BY u.userId]]>    
现在数据库设计已经改变,允许用户在系统中扮演多个角色。因此,已经创建了useraccess表,其中包含userId和角色。为应对变更,上述HQL已更新为

 <![CDATA[SELECT new com.test.reportsmodel.agentReport(u, 
        COUNT( t.transactionId ), SUM(CASE 
        WHEN t.status = 'CREATED' THEN 1 
        WHEN t.status = 'PAID' THEN 1 
        WHEN t.status = 'DELIVERED' THEN 1 
        ELSE 0 END )) 
        FROM User AS u
        LEFT JOIN u.transactionsForAgent t WITH 
        (t.invoiceDate BETWEEN :startDate AND :endDate)
        LEFT JOIN u.useraccesses a WITH 
        (a.role = 'EXTERNALAGENT')
        GROUP BY u.userId]]>

但是这个查询没有给出正确的结果。由于角色的变化,有相当多的HQL需要修改。我想了解在HQL中加入此更改的最佳方式。

结果在哪方面是错误的?@carbontax使用相同的数据和表中的更改,新报告有不同的数字。我没有对行数等进行完整分析。您需要进行更多分析。你的火柴打错了吗?重复行?不要让我们猜测。我可以找到问题,带有useraccess的连接应该是内部连接,而不是左连接,以便与角色完全匹配。这一变化似乎解决了这个问题。