2009-02-06 98 views
0

我用下面的查詢來查找重複:任何人都可以告訴我爲什麼我的SQL查詢不起作用(請參閱詳細信息)?

SELECT userID, 
COUNT(userID) AS NumOccurrences 
FROM userDepartments 
GROUP BY userID 
HAVING (COUNT(userID) > 1) 

然後我嘗試添加一個內部聯接,所以我可以看到它們存儲在不同的表匹配的用戶名。

SELECT userDepartments.userID, users.firstname, users.lastname, 
COUNT(userID) AS NumOccurrences 
FROM userDepartments INNER JOIN users ON userDepartments.userID = users.userID 
GROUP BY userID 
HAVING (COUNT(userID) > 1) 

但它給了我一個錯誤說users.firstname不是某些聚合函數或東西...的一部分

有誰知道我怎樣才能得到伯爵,僅顯示用戶超過1部門,並且還可以從另一個表中獲取名字和姓氏,以便我可以獲得分配了多個部門的用戶名單列表?

編輯:這是由所有三個截至UP爲我工作查詢...

SELECT  firstname, lastname 
FROM   tbl_users 
WHERE  (userID IN 
          (SELECT  userID 
          FROM   tbl_usersDepts 
          GROUP BY userID 
          HAVING  (COUNT(userID) > 1))) 
+0

請務必信任向您提供解決方案的最佳答案的人員;即使你最終想出了它。這裏有人肯定會給你一個機會。庫多茲到解決方案。 – SnapJag 2009-02-06 21:13:21

回答

5

我會重新查詢有點....

SELECT 
    duplicates.NumOccurrences, 
    duplicates.userID, 
    users.firstname, 
    users.lastname 
FROM (
    SELECT 
     userID, 
     COUNT(userID) AS NumOccurrences 
    FROM userDepartments 
    GROUP BY userID 
    HAVING COUNT(userID) > 1 
) duplicates 
INNER JOIN users ON duplicates.userID = users.userID 
+0

打了我幾秒鐘:) – 2009-02-06 20:59:50

+0

啊 - 你也打敗了我.. – Eclipse 2009-02-06 21:02:32

1

組:userDepartments.userID,users.firstname和users.lastname

+0

你打我吧... +1 – WildJoe 2009-02-06 21:20:31

2

的SQL引擎不知道每個用戶ID只有一個用戶名,所以你必須按名和姓以及用戶ID進行分組。

SELECT userDepartments.userID, users.firstname, users.lastname, 
COUNT(userID) AS NumOccurrences 
FROM userDepartments INNER JOIN users ON userDepartments.userID = users.userID 
GROUP BY userID, users.firstname, users.lastname 
HAVING (COUNT(userID) > 1) 

如果通過名字和姓氏不組,引擎不知道什麼是應該做的,如果它得到了一個給定的用戶標識姓名的多個值。通過告訴它由所有三個值進行分組,它知道如果每個用戶ID有多於一行,它應該返回所有這些行。儘管這不應該發生,但在這種情況下,引擎不夠智能,無法自行決定。

你也可以這樣來做:

SELECT users.userId, users.firstname, users.lastname, departments.NumOccurrences 
FROM users INNER JOIN (
    SELECT userId, count(userId) as NumOccurrences 
    FROM userDepartments 
    GROUP BY userID 
    HAVING (COUNT(userID) > 1) 
) departments ON departments.userID = users.userID 
0

您需要在您的集團user.firstname和users.lastname BY子句 - 因爲他們不是總值(注意,MySQL的實際支持您在查詢中使用的語法,但它不是標準的)。

0

如果「按組」做了那麼一切都可以「選擇」部分要麼必須是:

  1. 「分組依據」子句中提及或

  2. 的結果聚合函數(如COUNT())

0

我會做這樣(在Oracle中,以防萬一,這並不在你的系統中工作):

SELECT users.userID, users.firstname, users.lastname, NumOccurrences 
    FROM users 
     INNER JOIN (
     SELECT userID, COUNT(userID) AS NumOccurrences 
      FROM userDepartments 
      GROUP BY userID 
      HAVING (COUNT(userID) > 1) 
     ) d 
     ON d.userID = users.userID 
0

我看到有關加入您的姓名字段添加到組了很多很好的說明。我想我會做這樣的,雖然:

SELECT Users.*, dups.NumOccurances, ud.DepartmentName 
FROM Users 
INNER JOIN 
    (
    SELECT userID, COUNT(userID) AS NumOccurrences 
    FROM userDepartments 
    GROUP BY userID 
    HAVING (COUNT(userID) > 1) 
) dups ON dups.userID = Users.UserID 
INNER JOIN userDepartments ud ON ud.UserID=Users.UserID 
ORDER BY Users.LastName, Users.FirstName, Users.UserID 

原因之一這種方法是,它可以更容易地再回去拿,你可能想要的任何其他信息。

0

將您的user.Firstname和User.lastname添加到您的羣組條款

相關問題