SQL-запрос для выбора строк, имеющих 2 столбца равное значение - PullRequest
0 голосов
/ 17 октября 2018

Допустим, у меня есть следующая таблица:

id    || name  || published
--------------------------
1     || john  || 1
7     || alex  || 0
1     || roco  || 0
4     || mika  || 0
16    || mika  || 1
8     || zack  || 1
8     || alfi  || 1

Какой запрос sql следует выполнить, чтобы получить идентификаторы 16 и 8?

Я попробовал следующее, но у меня всегда есть идентификаторы 1, 16 и 8:

SELECT A.*
FROM table A
INNER JOIN (SELECT id, published
            FROM table
            WHERE published > 0
            GROUP BY id) B
ON A.id = B.id AND A.published = B.published
GROUP BY id

Есть идеи?

Ответы [ 4 ]

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

это может быть достигнуто с помощью

SELECT name, published
FROM A
WHERE id IN (16, 8)
ORDER BY id;
0 голосов
/ 17 октября 2018

Вы можете использовать not in

select t.* from your_table t
where t.id not in (
                  select id from your_table t1
                  where t1.published=0
                 )

выход

id  name    published
16  mika    1
8   alif    1
8   zack    1

DEMO DB FIDDLE

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

Вы можете использовать Group By с условным агрегированием в предложении Having, чтобы учитывать только те из них, где опубликовано имеет никогда не было ноль.

SELECT id
FROM table_name 
GROUP BY id 
HAVING SUM(published = 0) = 0

В качестве альтернативы, как @ Гордон Линофф предложил , вы также можете использовать следующее:

SELECT id
FROM table_name 
GROUP BY id 
HAVING MIN(published) > 0
0 голосов
/ 17 октября 2018

Вы, кажется, хотите NOT EXISTS:

SELECT a.*
FROM table a
WHERE NOT EXISTS (SELECT 1 FROM table a1 WHERE a1.id = a.id AND a1.published = 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...