2017-02-16 55 views
0

我的SQL很生疏,我必須解決一個問題。我有三個表中的數據,如下所示。在table1和table2列中,username都是唯一的!MySQL從一個表中選擇數據,其中條件在其他表中

我需要列出max(year)= 2016(表3中)且必須是type = 0(來自table2)的所有用戶(來自table1)的地址。 根據示例中的數據,結果應爲:地址3

任何想法如何使用單個SQL命令執行此操作?我可以(並且我已經完成了)寫一個腳本,但它應該是一個(複雜的)SQL命令!

我試過連接,內部連接等,但作爲偶爾的SQL用戶,我的知識是有限的,至少可以說。

table1    table2   table3   
---------|-------- --------|---- --------|----- 
username |address username|type username| year 
---------|-------- --------|---- --------|----- 
user1 |address1 user1 | 1 user1 | 2015 
user2 |address2 user2 | 1 user1 | 2016 
user3 |address3 user3 | 0 user1 | 2017 
user4 |address4 user4 | 0 user2 | 2015 
            user2 | 2016 
            user3 | 2015 
            user3 | 2016 
            user4 | 2014 
            user4 | 2015 
+0

見http://meta.stackoverflow.com/questions/333952/why-should -i-provide-an-mcve-for-what-seem-to-a-very-simple-sql-query – Strawberry

回答

0
select table1.address 
from table1 
    inner join table2 on table2.username = table1.username 
    inner join 
       (select username, max(date) maxDate 
       from table3 
       group by username) t3 on t3.username = table1.username 
where table2.type = 0 
     and t3.maxDate = 2016; 

select table1.address 
from table1 
    inner join table2 on table2.username = table1.username 
    inner join 
       (select username, max(date) maxDate 
       from table3 
       group by username 
       having max(date) = 2016) t3 on t3.username = table1.username 
where table2.type = 0; 
+0

我們生活在一個多麼美好的世界! 僅僅幾分鐘後,我發佈了問題兩個答案來了。 @McNets答案(我使用選項2)工程很好,所以我接受這個答案,因爲它更清楚一點(雖然我編輯了兩個選項的等號),似乎Avidos的答案有一個錯字,我沒有檢查它,但我相信它會起作用! 無論如何都要感謝McNets和Avidos。 – user3560520

+0

看來,我無法編輯接受的答案,因爲我張貼(或我不知道如何?!)。爲了答案與問題一致,2016年之前的標誌應該是=。當然,這很明顯! 再次感謝。 – user3560520

0

你可以試試這個,隊友:

SELECT 
-- I need to list addresses of all users (from table1) 
    t1.username, t1.address 
FROM 
    table1 t1 
    INNER JOIN table2 t2 ON t2.username = t1.username 
    INNER JOIN table3 t3 ON t3.username = t2.username 
-- and also must be of type=0 (from table2) 
WHERE t2.type = 0 
-- that have max(year)=2016 
HAVING MAX(t3.year) = 2016; 
+0

非常感謝Avidos。自從我將評論發佈到@McNets並接受他的回答後,您似乎已經編輯了您的答案! – user3560520

+0

@ user3560520是的,編輯了幾次,以提供我可以在滿足您的問題時提供的「最簡單」答案。乾杯 – Avidos

相關問題