2013-03-29 74 views
-4

我的查询是:Sql选择不同的一列和两个表的结果?

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

但其返回重复值。 所以我必须在code_text列上使用distinct。 有人能帮助我如何在code_text列上使用不同的条件吗?

+1

首先,在哪些列你在决定在code_text列上使用不同的值之前是否有重复的值? code_text列中的 –

+0

。这就是为什么我想在code_text列上使用distinct。 – Peter

+2

从您对某些答案的评论看来,您似乎对每个code_text值可能有许多有效的城市ID值,但您只希望看到code_text一次。你想用ID值做什么?我们可以将它们从查询中完全删除吗?如果没有,您是否希望查看最大或最小的相应ID值,是否想要在同一行中查看所有可用的ID值填入单个字符串,或者您是否有其他方式处理ID值? –

回答

1

选择不同cd.code_text,ab.ID 从城市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 
+0

这在大多数SQL方言中都是有效的,但在Microsoft Access下,'DISTINCT'不能用这种方式。 –

+0

@ Blood-HaZaRd:不工作。这将基于两列给出不同的记录。 – Peter

+0

你可以给你的表的一些数据输入,所以我可以看到你想要的结果是什么?或者至少有一张表,说明你的结果和你想要的结果。 –

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 
+0

不工作。我正在使用Oracle 11g,但它不工作。它给错误:ORA-00933:SQL命令没有正确结束 – Peter

+0

我不熟悉Oracle,但请定义“不工作”。 –

+0

你最后需要';'吗? –

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 

- 虽然在甲骨文更有效的方式可能是:

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

如果你想看到code_text的不同值与ID,做最简单的方法的相应最低值这将是:

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值,在甲骨文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 
相关问题