2014-06-13 58 views
1

我的數據庫看起來像這樣複雜的SQL查詢返回空結果

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

在您的查詢中,您有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 = ? 
+0

謝謝!!那正是我做錯了什麼...... – user3593826

0

您應該使用正確的連接語法。 。 。使查詢更易於閱讀和書寫。

不過,我猜這個問題是:

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

這將假設

t.assignee_id = t.creator_id 

也許這永遠不會發生在你的數據。