Несколько нет, но один да SQL - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь получить запрос, в котором у пользователя есть несколько продлений, но только для одного из них установлено значение да.Я хочу получить запрос, где, если все они не (0), чтобы вернуть свое имя.

SELECT u.id, CONCAT(u.fname, " ", u.lname) as full_name, renewals.renewRemind
     FROM user u 
INNER JOIN userRenewals renewals ON u.id = renewals.user_id
WHERE u.status = 1
AND renewals.renewRemind = 0
HAVING COUNT(renewals.renewRemind == 1) < 1

Пример

Billy - Renewal
ID: 39 - YES
ID: 40 - NO
ID: 43 - NO
ID: 50 - NO

 Vicky - Renewal
    ID: 78 - NO
    ID: 80 - NO
    ID: 100 - NO
    ID: 119 - NO

Вики должна появиться в запросе, Билли нет.

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

необходима простая проверка суммы. Обратите внимание, что я исключил условие объединения, при котором возобновление должно быть равно нулю. Вы хотите, чтобы все случаи были объединены, а не фильтровать 1 случай заранее, а только эту сумму до нуля

SELECT
u.id,
CONCAT(u.fname, " ", u.lname) as full_name,
SUM (renewals.renewRemind) rsum
     FROM 
user u 
INNER JOIN userRenewals renewals ON u.id = renewals.user_id
WHERE
u.status = 1
HAVING rsum = 0
0 голосов
/ 23 октября 2018

Звучит так, будто вы хотите сделать что-то вроде этого:

SELECT u.id, CONCAT(u.fname, " ", u.lname) as full_name, renewals.renewRemind
     FROM user u 
INNER JOIN userRenewals renewals ON u.id = renewals.user_id
WHERE u.status = 1
AND renewals.renewRemind = 0
AND u.id not in (
    select user_id
    from renewals
    where renewRemind=1
)
0 голосов
/ 23 октября 2018

Вот что я придумал:

SELECT u.id, CONCAT(u.fname, " ", u.lname) as full_name, renewals.renewRemind
     FROM user u 
 JOIN userRenewals renewals ON u.id = renewals.user_id
WHERE u.status = 1
group by u.id
having sum(renewals.renewremind) = 0

Вот скрипка

РЕДАКТИРОВАТЬ 1:

На самом деле это может быть быстреепоскольку соединение не требуется:

SELECT distinct u.id, CONCAT(u.fname, " ", u.lname) as full_name FROM user u 
WHERE u.status = 1
and u.id not in (select user_id from userrenewals where renewremind=1);
0 голосов
/ 23 октября 2018

Я бы использовал NOT EXISTS:

SELECT u.id, CONCAT(u.fname, " ", u.lname) AS full_name, r.renewRemind
FROM user u INNER JOIN 
     userRenewals r 
     ON u.id = r.user_id
WHERE NOT EXISTS (SELECT 1 FROM userRenewals r1 WHERE r1.user_id = r.user_id AND r1.renewRemind = 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...