2013-08-05 158 views
0

我已經寫了一個mysql查詢來從兩個表中檢索數據與子查詢和連接。 查詢工作正常,但我想避免子查詢,因爲一些性能問題。避免子查詢

它應該按組日期時間排序。

SELECT a.value1, a.value2, b.value1 FROM (SELECT * FROM A ORDER BY datetime DESC, id DESC) AS a 
INNER JOIN B AS b ON b.a_id=a.id 
WHERE a.value4="value" 
GROUP BY b.value2, b.value3; 

我曾嘗試多種方法來改寫這個沒有一個子查詢,但還是沒能找到解決的辦法。 在這種情況下是否可以避免子查詢?

+0

爲什麼'java'標籤? – Jatin

+0

爲什麼你使用sub? – jaczes

+0

因爲我想在對它進行分組之前按日期時間排序表。 – Janith

回答

2

首先,您的子查詢似乎沒有任何目的。你所做的只是執行一個ORDER BY,當你加入到另一個表時,這將會丟失。你應該能夠做到這一點:

SELECT a.value1, a.value2, b.value1 FROM 
    A as a 
    INNER JOIN 
    B AS b 
    ON b.a_id=a.id 
WHERE a.value4="value" 
GROUP BY b.value2, b.value3; 
+0

謝謝。但錯過了訂單。 – Janith

1

你可以試試這個

SELECT a.value1, a.value2, b.value1 FROM A AS a INNER JOIN B AS b ON b.a_id=a.id WHERE a.value4="value" GROUP BY b.value2, b.value3 ORDER BY a.datetime DESC, a.id DESC;; 
2

你沒有對錶的任何過濾器,這樣你就可以直接加入表:

SELECT b.value2, b.value3 FROM A AS a 
INNER JOIN B AS b ON b.a_id=a.id 
WHERE a.value4='value' 
GROUP BY b.value2, b.value3; 

請注意,您必須選擇按分組的列。

+0

謝謝。這錯過了A表中的order by子句。 – Janith