2016-02-26 57 views
0

我有兩個包含每個數字的公共ID的表格。 table1只包含1行,每個ID都有一個數字。根據這個數字和相應的ID,我想在表2中找到最小ID併爲每個數字(第一個表格)顯示此唯一ID。 table2包含多個ID(用於table1的數量)。選擇最小(ID),每個數字有多個ID的數字,也顯示來自其他表格的相同(最小)ID的數據。

從MT0意見後,該工作SQL是:

SELECT MIN(t2.ID) AS min_id, 
    t1.number 
FROM table1 t1 
    INNER JOIN 
    table2 t1 
    ON (t2.ID = t1.ID) 
WHERE t1.number in (<list of comma separated numbers>) 
GROUP BY t1.number; 

現在,我也想從表3,其中t3.ID = t1.ID得到(選擇)相關的數據(文本) = MIN(t2.ID)。

當我嘗試這樣做:

SELECT MIN(t2.ID) AS min_id, t3.data, t1.number 
FROM table1 t1 
    INNER JOIN 
    table2 t1 
    ON (t2.ID = t1.ID) 
    LEFT JOIN 
    table3 t3 
    on (t3.ID = t1.ID) 
WHERE t1.number in (<list of comma separated numbers>) 
GROUP BY t1.number; 

我得到錯誤「而不是GROUP BY表達式」爲t3.data。 我在做什麼(思考)錯誤?

謝謝。

+0

你的邏輯是難以遵循。你似乎命名了大部分'id'列,但這是不正確的。 –

+0

@GordonLinoff出於好奇,你爲什麼說這不正確? – Boneist

+0

@Boneist。 。 。在't1'中,'number'和'id'都是唯一的(根據文本)。在't2'中,'t2.id'與't1.id'相同。所以,min()並不是真的佔用最小的任何東西。通過使用'group by t1.number,t1.id'和''select''包含't1.id',查詢會更清晰。 –

回答

0

你的邏輯很難遵循。根據文本(不是示例代碼),我假設t1t2之間的連接鍵是number,而不是id

一種方法是使用聚集在一個子查詢:

SELECT t1.number, t3.* 
FROM table1 t1 INNER JOIN 
    (SELECT t2.number, MIN(t2.id) as minid 
     FROM table2 t2 
     GROUP BY t2.number 
    ) t2 
    ON t2.number = t1.ID INNER JOIN 
    t3 
    ON t3.t2id = t2.minid 
WHERE t1.number in (<list of comma separated numbers>); 

其實,措辭,t1是沒有必要的:

SELECT t2.number, t3.* 
FROM (SELECT t2.number, MIN(t2.id) as minid 
     FROM table2 t2 
     WHERE t2.number in (<list of comma separated numbers>) 
     GROUP BY t2.number 
    ) t2 
    t3 
    ON t3.t2id = t2.minid; 
+0

t3.data用於編號,但編號可以有許多基於t3.ID和t3.ID = t1.ID = min(t2.ID)的t3.data。 – Kostas75

相關問題