【问题标题】:Can I filter my results with a WHERE clause based on the result from a subquery in MySQL?我可以根据 MySQL 中子查询的结果使用 WHERE 子句过滤我的结果吗?
【发布时间】:2015-10-25 23:46:56
【问题描述】:

这是我当前的 mysql 查询。

    SELECT t.id, t.customer, t.indicator_tag, t.indicator_manu, t.indicator_model, t.created_at, t.updated_at, 
    ( SELECT status FROM events WHERE ticket_id = t.id ORDER BY created_at DESC LIMIT 1) AS status, 
    ( SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.created_by ) AS created_by, 
    ( SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.updated_by ) AS updated_by 
    FROM tickets t 
    WHERE status = 'Pending' OR status = 'Diagnosed' OR status = 'Repaired' 
    ORDER BY t.customer ASC, status ASC, t.indicator_tag ASC;

上述语句中的 WHERE 子句不会抛出任何错误,但它也不会过滤任何内容。我对 SQL 还很陌生,所以我还没有深入研究 JOINS。我还应该注意,事件表将为每张票提供多个事件,并且第 2 行的子查询将只获取最新的事件。有没有办法根据另一个表中的数据过滤结果,但只抓取每张票的最新事件?

换一种说法:
表门票有很多活动
属于门票的活动

HTML Output Example

上面的示例将显示我得到的输出。请注意,它仅显示最新状态,而不是像单个票证页面上那样显示所有事件。如果我能提供更多信息,我很乐意提供帮助。

【问题讨论】:

    标签: mysql node.js node-mysql


    【解决方案1】:

    使用HAVING:

    SELECT t.id, t.customer, t.indicator_tag, t.indicator_manu, t.indicator_model, t.created_at, t.updated_at, 
        ( SELECT status FROM events WHERE ticket_id = t.id ORDER BY created_at DESC LIMIT 1) AS status, 
        ( SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.created_by ) AS created_by, 
        ( SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.updated_by ) AS updated_by 
    FROM tickets t 
    HAVING status = 'Pending' OR status = 'Diagnosed' OR status = 'Repaired' 
    ORDER BY t.customer ASC, status ASC, t.indicator_tag ASC;
    

    http://www.w3schools.com/sql/sql_having.asp

    来自docs

    HAVING 子句可以引用 SELECT 列表或外部子查询中的 select_expr 中命名的任何列或 别名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多