mysql - SQL INNER JOIN 返回的行比我需要的多

标签 mysql sql

这是我的情况:

我有 2 个表,ticketstickets-details。我需要检索 "tickets" 中的信息以及 "tickets-details" 对每张票的最后回复,然后在表格中显示它们。我的问题是 "ticket-details" 每次回复都会返回一行,而我每张票得到的不止一行。如何在单个查询中实现此目的?

我尝试将 DISTINCT 添加到我的 SELECT 但没有。

我尝试使用 GROUP BY id_ticket 但没有成功,因为我没有从工单详细信息中得到最后回复

这是我的查询:

SELECT DISTINCT ti.id_ticket,ti.title,tiD.Reply,ti.status 
FROM tickets ti 
INNER JOIN ticket-details tiD ON ti.id_ticket = tiD.id_ticket 
WHERE user = '$id_user' ORDER BY status desc

-------------------------------- 编辑------------ ------------------------------------

我的表:

门票(id_ticket,用户,日期,标题,状态)

工单详情(id_ticketDetail, id_ticket, dateReply, reply)

最佳答案

假设最大id_ticketDetail代表ticket-details中的最新记录你可以试试

SELECT ti.id_ticket,
       ti.title,
       tiD.Reply,
       ti.status 
  FROM tickets ti JOIN 
(
    SELECT id_ticket, reply
      FROM `ticket-details` d JOIN 
    ( 
        SELECT MAX(id_ticketDetail) max_id
          FROM `ticket-details`
         GROUP BY id_ticket
    ) q ON d.id_ticketDetail = q.max_id
) tiD ON ti.id_ticket = tiD.id_ticket 
 WHERE ti.user = '$id_user' 
 ORDER BY ti.status DESC

或具有最大 dateReply

的版本
SELECT ti.id_ticket,
       ti.title,
       tiD.Reply,
       ti.status 
  FROM tickets ti JOIN 
(
    SELECT d.id_ticket, d.reply
      FROM `ticket-details` d JOIN 
    ( 
        SELECT id_ticket, MAX(dateReply) max_dateReply
          FROM `ticket-details`
         GROUP BY id_ticket
    ) q ON d.id_ticket = q.id_ticket
       AND d.dateReply = q.max_dateReply
) tiD ON ti.id_ticket = tiD.id_ticket 
 WHERE ti.user = '$id_user' 
 ORDER BY ti.status DESC

这是 SQLFiddle 两个查询的演示。

关于mysql - SQL INNER JOIN 返回的行比我需要的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533883/

相关文章:

php - 给出警告 : mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool 值

mysql - 查询以 & 开头的值 - 在 Oracle 中有效但在 MySQL 中无效?

sql - 如何基于列检查多个条件

c# - 将sql数据导出到xml

sql - 如何更新日期类型列?

mysql - 我如何锁定 MySQL 数据库以便写入/读取/更新/删除 .. 一切都被锁定?

php - 您没有权限访问此服务器 LAMP 上的/phpmyadmin/

mysql - 匹配 MySQL 中的单词 "Different"( bool 模式)

当 IDENTITY_INSERT 设置为 OFF 时,SQL 无法在表 'Table' 中插入标识列的显式值

sql - 仅从 varchar 字段中选择单词的第一个字母