SQL: запрос двух отдельных таблиц и возврат подсчитанных значений, затем группировка по обоим возвратам - PullRequest
0 голосов
/ 24 сентября 2018

Я изо всех сил пытаюсь получить этот запрос правильно.Я получил возвращенную таблицу для отображения псевдонима и двух связанных значений.Таблицы: Пользователи (псевдоним, имя и т. Д.) PostsAuth (псевдоним, postID и т. Д.) PostComm (псевдоним, comID и т. Д.)

Я пытаюсь получить НЕ , чтобы включить пользователя, если обазначения, возвращаемые в numPosts & numComments, имеют значение NULL (например, если они не прокомментировали или не создали сообщение).Я не уверен, как заставить это работать.Код выглядит следующим образом:

SELECT u.nickname, pa.numPosts, pc.numComments
FROM Users u
LEFT JOIN
(SELECT pa.nickname, COUNT(pa.nickname) AS numPosts
    FROM postAuthors pa
    GROUP BY pa.nickname
)pa
ON u.nickname = pa.nickname LEFT JOIN 
(SELECT pc.nickname, COUNT(pc.nickname) AS numComments
    FROM postComments pc
    GROUP BY pc.nickname
)pc
ON u.nickname = pc.nickname;

это создает

Nickname | numPosts | numComments

bob              1             2
sally            2             1
tommy         NULL          NULL
 etc.......

Я не хочу, чтобы tommy отображался.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

используйте условие where и установите ненулевое условие

    SELECT u.nickname, tpa.numPosts, tpc.numComments
    FROM Users u
    LEFT JOIN
    (SELECT pa.nickname, COUNT(pa.nickname) AS numPosts
        FROM postAuthors pa
        GROUP BY pa.nickname
    )tpa
    ON u.nickname = tpa.nickname LEFT JOIN 
    (SELECT pc.nickname, COUNT(pc.nickname) AS numComments
        FROM postComments pc
        GROUP BY pc.nickname
    )tpc
    ON u.nickname = tpc.nickname;
   where tpa.nickname is not null or tpc.nickname is not null
0 голосов
/ 24 сентября 2018

Вы можете контролировать его, пока вы показываете на странице с помощью этого условия.

if(object->property_name==Null && object->property_name==Null ){
 continue;
}
0 голосов
/ 24 сентября 2018

Просто добавьте WHERE pc.nickname IS NOT NULL OR pa.nickname IS NOT NULL к запросу, т.е.

SELECT u.nickname, pa.numPosts, pc.numComments
FROM Users u
LEFT JOIN
(SELECT pa.nickname, COUNT(pa.nickname) AS numPosts
    FROM postAuthors pa
    GROUP BY pa.nickname
)pa
ON u.nickname = pa.nickname LEFT JOIN 
(SELECT pc.nickname, COUNT(pc.nickname) AS numComments
    FROM postComments pc
    GROUP BY pc.nickname
)pc
ON u.nickname = pc.nickname
WHERE pc.nickname IS NOT NULL OR pa.nickname IS NOT NULL

Это исключит всех пользователей, у которых нет значений ни в postAuthors, ни в postComments.

...