2015-10-25 78 views
0

這是我當前的mysql查詢。根據MySQL中子查詢的結果,我可以使用WHERE子句過濾結果嗎?

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

上面的例子表明,我得到的輸出。請注意,它僅顯示最新狀態,而不是像單張票頁上的所有事件。如果我能提供更多信息,我會很樂意提供。

回答

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命名或在外部子查詢中。

相關問題