2011-07-15 35 views
0

有兩個問題。SQL查詢幫助 - 加入第二個表,可能嗎?

一:如何將兩個表連接在一起,這不是原來的'x'表?

示例:抓取所有報告和用戶級別名稱。

Report    
id | user_id  
1 1 

User    
id | level_id  
1 1 

Level    
id | level_name  
1 Admin 

SELECT  report.id, 
      report.user_id, 
      level.name 
FROM  report 
INNER JOIN user 
ON   report.user_id=user.id 
INNER JOIN level 
ON   user.level_id=level.id 

似乎沒有工作。

二:如何連接表格不是來自1-1而是1-many?

說我想:

SELECT * FROM user JOIN report ON user.id=report.user_id WHERE user.id='4' 

但只有按日期倒序排列的最新報告加入?

我知道它好像是我要求你爲我完成我的工作,但我只需要知道如何使用它來完成這個工作,而不一定是你編碼它。謝謝。

UPDATE:

第一個問題:固定式,感謝 第二個問題:

我會告訴你我的查詢,以更好的感覺,我沒有解釋得很好。我的意思是一個多種多樣的關係,我可以從中獲取用戶列表和他們的最新報告!

SELECT 
    user.id 
FROM 
    user 
<< INNER JOINS ON OTHER TABLES >> 
INNER JOIN 
    (
     SELECT 
      report.id 
     FROM 
      report 
     WHERE user.id=report.user_id 
     ORDER BY 
      date 
     DESC 
     LIMIT 1 
    ) 
+2

爲什麼沒有你查詢的工作?它看起來不錯。什麼是錯誤信息? – Jacob

+1

你的第一個問題的查詢結果如何?該查詢看起來對我來說應該是有效的。對於你的其他問題,如果你有一對多的關係,並且你只想讓多方面的某一行顯示出來,那麼你需要應用一個過濾器。在你的例子中,你可能需要加入一個子查詢,而不是直接加入表中。 –

+0

是的,當我在這裏重寫時(不是直接複製和粘貼),我錯誤地使用了列名,爲了簡單起見,我重新編寫了列名。第一個作品!第二個我努力與嵌套選擇 – user781439

回答

1

關於第二個問題:

MySQL的風格:

SELECT * 
FROM user 
INNER JOIN report re 
    ON re.id = (SELECT id 
       FROM report 
       WHERE user_id=user.id 
       ORDER BY report.date DESC 
       LIMIT 1) 
WHERE user.id='4' 
+0

旁邊不能這樣做,我需要一個嵌套的,因爲我選擇的用戶列表和他們的最新報告。 – user781439

+0

更新了答案 – Jacob

+0

但是,如果我需要報告報告中的更多列而不僅僅是id,該怎麼辦? – user781439

0

一:我看不錯,但不應將SELECT子句中level.level_name?

二:如果你只是想在最近的報告中它會是這樣的......

SELECT TOP 1 * FROM user JOIN report ON user.id=report.user_id WHERE user.id='4' order by report.date desc