为什么我的查询仍显示重复的元组? 我想要所有不同元组的所有属性
select distinct * from employees;
答案 0 :(得分:3)
我认为您的方法涉及 NULL值和空字符串可能是问题的原因:
create table tab( id int, value varchar2(75));
insert into tab values(1,' ');
insert into tab values(1,' ');
insert into tab values(1,'');
insert into tab values(1,null);
select distinct * from tab;
ID VALUE
-- -----
1
1
1 (null)
select id, length(value) as value from tab;
ID VALUE
-- -----
1 2
1 1
1 (null)
1 (null)
Oracle认为''
为NULL
,但 length> = 1 的空字符串不视为NULL
。 / p>
答案 1 :(得分:0)
如果您需要一个元组所有不同的结果,则不应使用*
(所有列),而应仅为元组中涉及的列明确选择
select distinct col1, col2, col3 from employees;
通常使用所有列选择器(*
),还从表中选择通常(根据定义)不重复的主键,因此使用select * ...
您将获得表中的所有行。
答案 2 :(得分:0)
如果您的列中有一些“”,则会发现重复,因为
Value1值2“”不是
Value1值2“”也不
value1 value2 NULL
此外,PrimaryKey始终是唯一的,因此
选择不同的*,是唯一
通常,如果您需要在表员工中“选择唯一”,则会出现概念问题,因为每个员工只应出现一次(如果它是真正的表员工而没有链接)
答案 3 :(得分:0)
要在导入期间解决此问题,您必须从字符串末尾修剪空格,这应照顾到这3个不同的字符。请注意,LTRIM和RTRIM仅删除了“空白”,在文档中进一步说明建议仅考虑空格。因此,您将不得不使用其他修整功能(例如您正在使用的编程语言)来进行修整。