2014-10-07 1 views
1

달성하고자하는 것은 실제로 정말 기본이며, 비슷한 해결책을 찾았습니다. 그러나 사용하고있는 MS SQL Compact에서는 작동하지 않을 수 있습니다.다른 테이블에서 MAX 값을 선택하십시오.

내가이 테이블이 있다고 가정하자 :

User     Comments 
ID | Name    UserID | Comment   | Posted 
-----+-------------  -------+-------------------+---------- 
0 | Adam    1  | Whatever 1  | 2014-01-01 
1 | Beth    1  | whatever 2  | 2014-01-02 
2 | Chris   0  | Whatever 3  | 2014-01-02 
3 | David   3  | Whatever 4  | 2014-01-04 

내가 원하는 것이있는 경우, 모든 사용자를 얻고 최신 의견을 제시하는 것입니다. 코멘트가없는 경우는, null가 아니면 안됩니다. 즉 내가이 결과를 원하는이다 :

Name | Comment   | Posted 
------+------------------+----------- 
David | Whatever 4  | 2014-01-04 
Beth | Whatever 2  | 2014-01-02 
Adam | Whatever 3  | 2014-01-02 
Chris | NULL    | NULL 

내가 무엇을 가지고, 지금까지 (이 예를 들어 간체)이 코드 같은 것입니다 :

SELECT u.Name AS Name, c.Comment AS Comment, c.Posted AS Posted 
FROM User AS u 
INNER JOIN Comments AS c ON u.ID = c.UserID 
INNER JOIN 
(
    SELECT UserID, MAX(Posted) AS Posted FROM Comments AS c2 GROUP BY UserID 
) AS c2 ON c2.Posted = c.Posted ORDER BY Posted DESC 

이 어떻게 든 작동,하지만 내 날카로운 예 나는 100 명의 사용자를 갖고 있으며, UserID : s는 93 개의 게시물이다. 하지만 나는 7 개의 NULL 행을 가진 100 개의 행을 가져야 할 때만 84 개의 행을 얻을 수 있습니까? 그래서, 내 질문은 :

1) 내 쿼리

2) 당신이 그것을 어떻게 할 것이 잘못 무엇입니까?

답변

1

조회에서 올바른 트랙을 따라,하지만 당신은 left join 대신 inner join 및 조인 순서 재 배열해야합니다

귀하의 질의는 적어도 하나의 의견이있는 사용자를 반환

SELECT u.Name AS Name, c.Comment AS Comment, c.Posted AS Posted 
FROM User u LEFT JOIN 
    (SELECT UserID, MAX(Posted) AS Posted 
     FROM Comments c2 
     GROUP BY UserID 
    ) c2 
    ON u.ID = c2.UserID LEFT JOIN 
    Comments c 
    ON c2.Posted = c.Posted 
ORDER BY Posted DESC; 
, 그것은 사용자를 벗어났습니다 그래서 당신을 코멘트가 없습니다.

+0

글쎄, 모든 방향을 틀어 봤지만 잘못된 결과를 보았습니다. ;) 같은 수의 게시물을 올렸습니다. – gubbfett

+0

늦은 편집; 나는 당신이 양쪽에 LEFT를 놓친 것을 놓쳤다. 그리고 그것은 나에게 수백 개의 줄을 주었다. 하지만, 100 가지 이상의 사용자를 모두 제공하지는 못하기 때문에 내 쿼리가 실제로 적절하지 않은 경우도 있습니다. – gubbfett

+0

@ gubbfett. . . 어떻게 될지 알 수 있습니다. 'join '은 올바른 순서로 이루어져야합니다. –

1

마지막으로 왼쪽 조인을 제외한 Gordon Linoff의 말과 같습니다.

SELECT u.Name AS Name, c2.Posted AS Posted,c.Comment 
    FROM [User] u LEFT JOIN 
    (SELECT UserID, MAX(Posted) AS Posted 
     FROM Comments c2 
     GROUP BY UserID 
    ) c2 
    ON u.ID = c2.UserID LEFT JOIN 
    Comments c on c2.Posted=c.Posted AND c2.UserId=c.UserId