2014-06-13 4 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 идентификатора. Мой запрос выглядит так:

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_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 = ? 
+0

спасибо! это именно то, что я делал неправильно ... – user3593826

0

Вы должны использовать правильный синтаксис соединения. , , упрощает чтение и запись запроса.

Однако, я предполагаю, что проблема:

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

Это было бы предположить, что

t.assignee_id = t.creator_id 

Возможно, это никогда не происходит в ваших данных.

Смежные вопросы