2014-03-29 33 views
0

如何在同一張桌子上做雙連接?我該如何在同一張桌子上做雙連接

基本上,我想這樣做:

1 - Sort all records in descending order by a order_date_last_revised column. 2 - Group those records by order_base_id column to eliminate duplicates. 3 - Match the id of those records and return all columns for them.

這裏是我的SQL,這是行不通的:

SELECT * FROM sys_quote_master q1 LEFT JOIN sys_quote_master q2 ON q1.order_id = q2.order_id group by q2.order_base_id LEFT JOIN sys_quote_master q3 ON q2.order_id = q3.order_id WHERE order_base_id="010313-6063" order by q3.order_date_last_revised desc;

基本上,我得到這個當我嘗試執行它:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN sys_quote_master q2 ON q1.order_id = q2.order_id order by q3.order_dat' at line 4 

回答

1

您的group by超出如果地方:它必須在表後出現,在where子句(如果有的話)之後:但是

SELECT * 
FROM sys_quote_master q1 
LEFT JOIN sys_quote_master q2 ON q1.order_id = q2.order_id 
LEFT JOIN sys_quote_master q3 ON q2.order_id = q3.order_id 
WHERE order_base_id="010313-6063" 
group by q2.order_base_id 
order by q3.order_date_last_revised desc; 

注意,GROUP BY,因爲它代表會不會有用;您必須列出不是聚合列的所有列才能按預期運行。

也許按組是不是你想要的 - 考慮使用distinct模仿重複:

select distinct * 
from ... 
-- and remove group by clause 
+0

嗨 - 哇...你是難以置信......非常感謝你這麼快速的響應...我運行查詢和現在的作品,但我沒有得到正確的結果。 基本上,我有這3條記錄與order_id的21868,21869和21871.它們都有相同的order_base_id值'010313-6063'。但是它們有3個不同的日期時間戳,用於order_date_last_revised列。 如何按日期按降序排列它們,然後根據重複的order_base_id列排除重複的列,然後返回其所有列,基本上,我認爲只應返回21871。 – jrobertsz66

+0

但我越來越21868.另外,使用不同的*,返回所有3,因爲它們都有不同的order_id和不同的日期。我只是想通過刪除order_base_id列中重複列值爲'010313-6063'的列來區分它們,所以我只希望它們僅在此列中有所區別。 – jrobertsz66

+0

我想我需要找出一種方法先按順序,然後按組合,然後選擇所有列... :) – jrobertsz66

0

這個怎麼樣?

SELECT * FROM sys_quote_master AS g1 JOIN (SELECT order_id, order_base_id, max(order_date_last_revised) as mostrecent FROM sys_quote_master WHERE order_base_id="010313-6063" group by order_base_id) AS g2 ON g2.mostrecent = g1.order_date_last_revised ORDER BY g1.order_id;

相關問題