java - 复杂的sql查询返回空结果

标签 java mysql sql hibernate join

我的数据库是这样的

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

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

最佳答案

在您的查询中,您有 AND t.assignee_id = u.u_id 以及 AND 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 = ?

关于java - 复杂的sql查询返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196627/

相关文章:

java - rxjava 中的异步测试不起作用

java - tomcat webapp如何在没有spring security的情况下切换到https并返回http

java - 为什么在方法中声明的对象在方法返回之前要进行垃圾回收?

mysql - 尽管设置正确,Aurora Serverless MySQL 仍给出 "Index Column Size Too Large"

c++ - Qt - QTreeView 和 SQL - 性能建议

C# SQL 输出代码问题

java - 忽略Maven版本号规则的坏处

mysql - 更新 TimeStamp 字段是 MySQL 中的慢查询

mysql - information_schema 显示 "unknown table status: TABLE_TYPE"mysql phpmyadmin

sql - T-SQL 使用来自字段表中字符串的整个 WHERE 条件