【问题标题】:complicated sql query returning empty result复杂的sql查询返回空结果
【发布时间】:2014-08-03 12:00:06
【问题描述】:

我的数据库是这样的

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();

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

【问题讨论】:

    标签: java mysql sql hibernate join


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      但是,我猜问题是:

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

      假设是

      t.assignee_id = t.creator_id
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        • 2011-04-11
        • 1970-01-01
        • 2021-03-18
        • 2021-11-20
        • 2019-10-13
        相关资源
        最近更新 更多