繁体   English   中英

复杂的SQL查询返回空结果

[英]complicated sql query returning empty result

我的数据库看起来像这样

tickets table
-------------
ticket_id
title
description
department_id
status_id
priority_id
assignee_id
creator_id

departments table
------------------
dep_id
dep_name

status table
------------
status_id
status_name

priority table
---------------
pr_id
pr_name

users table
-----------
u_id
username
password
salt
email
firstName
lastName
department_id
userlevel_id

userlevels table
-----------------
ul_id
ul_name

给定收货人ID,我需要加载所有票证。 我的查询看起来像这样

SQLQuery q = q.createSQLQuery("SELECT t.*,d.*,s.*,p.*,u.*,a.* FROM tickets t, departments d, status s, priority p, users u, attachments a WHERE t.department_id=d.dep_id AND t.status_id=s.stat_id AND t.priority_id=p.pr_id AND t.assignee_id=u.u_id AND t.creator_id=u.u_id AND t.tick_id=a.ticket_id AND assignee_id=?");

    q.setInt(0, some_valid_assignee_id);
    List<Object> result = q.list();

但是它返回一个空的对象列表。 谁能指出我正确的方向,谢谢!

您应该使用正确的连接语法。 使查询更易于阅读和编写。

但是,我猜测问题是:

t.assignee_id = u.u_id AND t.creator_id = u.u_id

那会假设

t.assignee_id = t.creator_id

也许这永远不会在您的数据中发生。

在您的查询中,您具有AND t.assignee_id = u.u_idAND t.creator_id = u.u_id 这将返回任何记录,唯一的方法是,如果assignee_idcreator_id是相同的。 我认为您真正需要做的是两次链接到users表,如下所示:

SELECT t.*, d.*, s.*, p.*, u1.*, u2.*, a.* 
FROM tickets t
  INNER JOIN departments d ON t.department_id = d.dep_id 
  INNER JOIN status s ON t.status_id = s.stat_id 
  INNER JOIN priority p ON t.priority_id = p.pr_id 
  INNER JOIN users u1 ON t.assignee_id = u.u_id 
  INNER JOIN users u2 ON t.creator_id = u.u_id 
  INNER JOIN attachments a ON t.tick_id = a.ticket_id 
WHERE assignee_id = ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM