SQL-запрос, основанный на ALL или альтернативном или другом более простом способе - PullRequest
0 голосов
/ 05 мая 2018
/* Create a table called NAMES */
CREATE TABLE test(Id integer PRIMARY KEY, group text, content text);

/* Create few records in this table */
INSERT INTO test VALUES(1,'mygroup','foobar');
INSERT INTO test VALUES(2,'myothergroup','foobar');
INSERT INTO test VALUES(3,'myothergroup','foobaz');
INSERT INTO test VALUES(4,'gr1','foobaz');
INSERT INTO test VALUES(5,'gr0','foobaz');
COMMIT;

У меня есть таблица SQL, как указано выше.

Я хочу найти весь контент, который присутствует во всей группе, начиная с моего.

Мой запрос выглядит следующим образом:

SELECT DISTINCT content from test WHERE group like 'my%' and content = 
ALL(SELECT content from test WHERE group like 'my%');

, который кажется неверным, так как ничего не возвращает, он должен возвращать foobar, потому что foobar присутствует во всех возможных группах, начиная с my.

Например: 2

Допустим, я хочу найти все содержимое всех групп, начиная с gr:

SELECT DISTINCT content from test WHERE group like 'gr%' and content = 
ALL(SELECT content from test WHERE group like 'gr%');

Здесь, в этом случае, он работает совершенно нормально и возвращает foobaz, так как foobaz присутствует во всех возможных группах, начиная с gr.

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Все, что вам нужно, это запрос на присоединение

SELECT DISTINCT t1.content from test t1 join test t2 on t1.Id=t2.Id and t1.group_g like 'my%'

SELECT DISTINCT t1.content from test t1 join test t2 on t1.Id=t2.Id and t1.group_g like 'gr%'
0 голосов
/ 05 мая 2018

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

select content
from test
where group like 'my%'
group by content
having count(distinct group) = (select count(distinct group) from test where group like 'my%');
...