2013-11-27 22 views
0

我有表A中與最新狀態= 1的MySQL記錄在第二表

| id | Name | 
_________________________ 
| 1  | ABC  | 
_________________________ 
| 2  | BCD  | 
_________________________ 

表B

| id | a_id | Status | timestamp | 
__________________________________________________________ 
| 1  | 1  |  1  | timestamp | 
__________________________________________________________ 
| 2  | 1  |  2  | timestamp | 
__________________________________________________________ 
| 3  | 1  |  3  | timestamp | 
__________________________________________________________ 
| 4  | 2  |  1  | timestamp | 
__________________________________________________________ 

在上面的例子中我只要挑

| name | a_id | Status | timestamp | 
__________________________________________________________ 
| BCD | 2  |  1  | timestamp | 

因此,與任何只有最新狀態爲1的記錄,我想選擇該記錄。如果最新狀態是2或3,我不希望他們選擇...

如果可能我不想使用子查詢,因爲我使用的Codeigniter其實並不喜歡子查詢。

請幫

+0

沒有子查詢,這很簡單,但沒有適當的DDL我真的不能打擾。 (雖然大概codeigniter也可以使用視圖 - 在這種情況下,子查詢有什麼問題) – Strawberry

+0

我不知道CodeIgniter,但你試過這個:https://github.com/EllisLab/CodeIgniter/wiki/Subqueries?似乎解決你的子查詢問題。我不認爲這可以沒有.. – NickyvV

+0

真的沒有問題,我想知道是否可以做到沒有子查詢,想到會學到新的東西 @nickyvV:我已經試過了,我不想在系統文件中更改任何內容,但我可以使用自定義查詢,但必須確保它們是乾淨的。 –

回答

1

所以這將是:

SELECT 
    A.name, 
    B.* 
FROM 
    (SELECT 
     a_id, 
     MAX(`timestamp`) AS max_timestamp 
    FROM B 
    GROUP BY a_id) AS latest 
    LEFT JOIN B 
     ON 
     B.a_id=latest.a_id 
     AND 
     B.`timestamp`=latest.max_timestamp 
    LEFT JOIN A 
     ON B.a_id=A.id 
WHERE 
    B.status=1 

至於子查詢 - 我懷疑你可以不用在單個查詢檢索所需信息。那是因爲你需要使用行集,這是一列分組的結果,引用另一列。因此,您需要先對它進行分組,然後將JOIN應用於結果行集。

+2

太好了,但他提到他不想子查詢:) – Hawk

+1

同意。我不認爲這是可能的,因爲需要引用來自另一列的一列的行集合。不在單個查詢中。 –

+0

嗯,我會用子查詢..只是想知道是否有辦法做到這一點沒有子查詢..我試着這個查詢,希望它的作品... –

1

感謝@Strawberry指出這篇文章,我想出了一個方法來做這個例子。

select a.name 
     ,b1.a_id 
     ,b1.status 
     ,b1.`timestamp` AS b1Time 
FROM TableA a 
JOIN TableB b1 ON b1.a_id = a.id 
LEFT JOIN TableB b2 ON b2.a_id = b1.a_id AND b1.`timestamp` < b2.`timestamp` 
WHERE b2.`timestamp` IS NULL 
AND b1.status = 1 

看到這個Fiddle

+0

哪個查詢是你推薦的,哪一個會更快,當我們有數據下雪了嗎? –

相關問題