我一直在努力制作一个返回以下内容的SQL查询;
作为同事和朋友的所有对的名单
我的表是从以下命令构建的;
CREATE TABLE relation(
name_1 varchar(255),
name_2 varchar(255),
rel varchar(255)
)
我试过
SELECT NAME_1, NAME_2 from relation
where rel LIKE 'c%' and rel like 'f%';
但返回的表是空的。
答案 0 :(得分:1)
您需要使用
SELECT NAME_1, NAME_2 from relation
where rel LIKE 'c%' or rel like 'f%';
rel不能以c开头并以f。
开头答案 1 :(得分:1)
没有行可以同时以rel
和c
开头的f
。
一种方法是创建一个子查询来对关系进行分类。在这里,它将同事分类为1,将朋友分类为2.要检测具有交换名称的关系行,查询将按字母顺序选择名字name_1
。 having
子句要求存在两种类型的关系。
select name_1
, name_2
from (
select case when name_1 > name_2 then name_1 else name_2 end as name_1
, case when name_1 > name_2 then name_2 else name_1 end as name_2
, case when rel like 'c%' then 1
when rel like 'f%' then 2
end as Type
from YourTable
) as SubQueryAlias
group by
name_1
, name_2
having count(distinct Type) = 2
另一种方法是选择所有同事,并使用exists
要求他们也是朋友:
select distinct
case when name_1 > name_2 then name_1 else name_2 end as name_1
, case when name_1 > name_2 then name_2 else name_1 end as name_2
from YourTable c
where c.rel like 'c%'
and exists
(
select *
from YourTable f
where f.rel like 'f%'
and
(
(c.name_1 = f.name_1 and c.name_2 = f.name_2)
or (c.name_1 = f.name_2 and c.name_2 = f.name_1)
)
)
答案 2 :(得分:0)
这种情况从未存在
rel LIKE 'c%' and rel like 'f%';
你不能用c 和 开头用f!
也许你的意思是 OR
答案 3 :(得分:0)
LIKE'c%'和rel喜欢'f%';
考虑一下你在说什么:返回列rel
以c开头,同时以f开头的所有行。
显然不可能
你可能想要:
where rel LIKE 'c%' OR rel like 'f%'