在进行SQL查询时苦苦挣扎

时间:2011-03-06 10:13:05

标签: sql

我一直在努力制作一个返回以下内容的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%'; 

但返回的表是空的。

4 个答案:

答案 0 :(得分:1)

您需要使用

SELECT NAME_1, NAME_2 from relation
where rel LIKE 'c%' or rel like 'f%'; 

rel不能以c开头并以f。

开头

答案 1 :(得分:1)

没有行可以同时以relc开头的f

一种方法是创建一个子查询来对关系进行分类。在这里,它将同事分类为1,将朋友分类为2.要检测具有交换名称的关系行,查询将按字母顺序选择名字name_1having子句要求存在两种类型的关系。

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