我的数据库看起来像这样
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
我需要在给定asignee 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();
但是它返回了一个空对象列表。任何人都可以指出我正确的方向,谢谢!!
答案 0 :(得分:0)
您应该使用正确的连接语法。 。 。使查询更易于阅读和编写。
但是,我猜测问题是:
t.assignee_id = u.u_id AND t.creator_id = u.u_id
那就是假设
t.assignee_id = t.creator_id
也许这在您的数据中永远不会发生。
答案 1 :(得分:0)
在您的查询中,您有AND t.assignee_id = u.u_id
和AND t.creator_id = u.u_id
。返回任何记录的唯一方法是assignee_id
和creator_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 = ?