Sql选择不同的一列和两个表的结果?

时间:2013-03-29 08:01:31

标签: sql database oracle oracle11g

我的查询是:

  select ab.ID, cd.code_text  
  from city ab, codes cd 
  where ab.code = cd.code;

但它返回的重复值。 所以我必须在code_text列上使用distinct。 有人可以帮我解决如何在code_text列上使用distinct这个条件吗?

3 个答案:

答案 0 :(得分:1)

选择不同的cd.code_text,ab.ID       来自city ab,代码cd       其中ab.code = cd.code;

<强>被修改

Select ID, "Code Text" From (  
Select ID, "Code Text", RANK() OVER (PARTITION BY "Code Text" ORDER BY ID) "The Rank"
From(
select ab.ID as "ID", cd.code_text as "Code Text"
from city ab, codes cd  
where ab.code = cd.code))
where "The Rank" = 1

答案 1 :(得分:1)

在Microsoft Access中:

SELECT ab.ID, cd.code_text
FROM city ab, (
    SELECT DISTINCT codes.code, codes.code_text
    FROM codes
) AS cd
WHERE ab.code = cd.code

答案 2 :(得分:0)

如果您只想从代码表中查看code_text的不同值,最简单的方法是:

select distinct code_text from codes

如果你想从城市表中存在代码的代码表中看到code_text的不同值,最简单的方法是:

select distinct cd.code_text  
from city ab
join codes cd on ab.code = cd.code

- 虽然Oracle 中更有效的方式可能是

select distinct cd.code_text  
from codes cd 
where exists
(select 1 from city ab where ab.code = cd.code)

如果你想看到具有最低相应ID值的code_text的不同值,最简单的方法是:

select min(ab.ID), cd.code_text  
from city ab
join codes cd on ab.code = cd.code
group by cd.code_text

如果您希望在每个给定的code_text值的同一行中看到填充到单个字符串中的所有适用ID值,那么Oracle 11中最简单的方法是:

select listagg(ab.ID, ',') within group (order by ab.ID) IDs, cd.code_text  
from city ab, codes cd 
where ab.code = cd.code
group by cd.code_text