基于all或alternative或其他更简单的方式的sql查询

kkbh8khc  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(360)
/* 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开始的所有可能的组中。
请帮忙。

dddzy1tm

dddzy1tm1#

你似乎想要:

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%');
xzlaal3s

xzlaal3s2#

您只需要一个连接查询

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%'

相关问题