Выбор SQL зависит от количества с условием - PullRequest
0 голосов
/ 24 января 2019

У меня есть две таблицы:

Table A:                Table B:
id  name               id   a_id   param
1    xxx               1      1      3
2    yyy               2      1      4
                       3      1      5
                       4      2      3
                       5      2      4
                       6      2      9

Мне нужно выбрать из таблицы A такие имена, где количество связанных строк из B с 3 <= param <= 5 меньше 3.

В приведенном выше случае он должен давать только yyy, поскольку он имеет только 2 связанных строки из B, которые
есть 3 <= param <= 5. В то время как xxx имеет 3 связанных строки с таким условием.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете использовать следующее, используя GROUP BY с HAVING:

SELECT A.name 
FROM A LEFT JOIN B ON A.id = B.a_id AND B.param BETWEEN 3 AND 5 
GROUP BY A.name 
HAVING COUNT(*) < 3

Если вам нужны все столбцы таблицы A, вы можете использовать следующее с помощью INNER JOIN с указанным выше SELECT:

SELECT A.* 
FROM A INNER JOIN (
    SELECT A.id 
    FROM A LEFT JOIN B ON A.id = B.a_id AND B.param BETWEEN 3 AND 5 
    GROUP BY A.id 
    HAVING COUNT(*) < 3
) A2 ON A.id = A2.id;

демо: https://www.db -fiddle.com / f / jBCw5G1LvrRC37TLVx3UsB / 1

0 голосов
/ 24 января 2019

Хммм. , , Вы можете использовать group by и join:

select a.*
from a left join
     (select a_id, count(*) as cnt
      from b
      where param >= 3 and param <= 5
      group by a_id
     ) b
     on b.a_id = a.id
where b.cnt < 3 or b.cnt is null;
...