2012-08-11 37 views
1

我發現我不知道如何在SQL Server中對查詢結果進行分組。我有SQL Server 2005中有三個表:跨越三個表的SQL Server中的GROUP BY

域:

- id 
- name 

實體:

- domain_id 
- user_id 

用戶:

- id 
- login 

因此,它是跨第三個表的兩個表之間的常見關係,其中幾個域可能與一個用戶有關。

T-SQL查詢:

SELECT domain.name, users.login 
FROM domain, entity, users 
WHERE domain.id = entity.domain_id AND entity.user_id = users.id 
GROUP BY users.login, domain.name 

回報:

+------+-------+ 
| name | login | 
+------+-------+ 
| dom1 | user1 | 
| dom4 | user1 | 
| dom5 | user1 | 
| dom2 | user2 | 
| dom3 | user3 | 
+------+-------+ 

我的問題是如何創建的T-SQL查詢它作爲MySQL的返回相同的:

SELECT domain.name, user.login 
FROM domain, entity, user 
WHERE domain.id = entity.domain_id AND entity.user_id = user.id 
GROUP BY user.login 

+------+-------+ 
| name | login | 
+------+-------+ 
| dom5 | user1 | 
| dom2 | user2 | 
| dom3 | user3 | 
+------+-------+ 
+0

您的查詢應該在MySQL和SQL Server的工作。你的表格內容有可能不同嗎? – Andomar 2012-08-11 11:13:42

+2

@Andomar:第二個查詢具有'GROUP BY'中缺少的'domain.name'。 – 2012-08-11 11:19:26

+0

@ypercube:對,令人驚訝的壽,因爲我希望SQL Server返回一個錯誤的'組by'列 – Andomar 2012-08-11 11:26:19

回答

2

創建一個MS SQL(和大多數標準實現),它返回與MySQL

SELECT MAX(domain.name), user.login 
FROM domain, entity, user 
WHERE domain.id = entity.domain_id AND entity.user_id = user.id 
GROUP BY user.login 

在這兩種環境中,FROM/WHERE加入將得到更好的表達爲

FROM domain 
    INNER JOIN entity 
     ON domain.id = entity.domain_id 
    INNER JOIN user 
     ON entity.user_id = user.id 
+0

WOW。謝謝。 max() - 這是我需要的。 – 2012-08-11 15:50:31