【问题标题】:Inner join ignores identical values that have upper cases in one list and lower cases in another内连接忽略在一个列表中具有大写字母而在另一个列表中具有小写字母的相同值
【发布时间】:2014-10-08 12:06:40
【问题描述】:

在 PostgreSQL 中 - 在尝试以下内部连接时 - 我意识到一些假设匹配的条目 - 无法匹配(!) 当我比较我的两个列表时,我发现失败的列表在一个列表中包含数字和小写字母的混合,而在另一个列表中显示为数字和大写字母。具体来说 - 像 C6orf70 和 C9orf156 这样的值以这种格式出现在一个列表中,而在另一个列表中以以下格式出现:C6ORF70 和 C9ORF156 结果,内部连接忽略了所有此类情况并且没有执行任何匹配。 您知道在加入两个列表时如何告诉我的内部联接忽略匹配案例吗?... 我对内连接“正常”基因没有任何问题,例如:HSP6、POLL 等……这些在两个列表中都是大写格式。 非常感谢!

选择 t1.* ,bvi_d_exp,bvi_r_exp,bvi_exp.bvi_lr_rvd 进入 Patient_bvi_p_exp 从 (选择 split_part(id4, '@', 3)genes,* 来自患者_bvi_p) t1 内部联接 (选择基因名,bvi_d_exp,bvi_r_exp,bvi_lr_rvd 来自基因表达 17p) bvi_exp 在 t1.genes=bvi_exp.genename

【问题讨论】:

  • 如果它是小写的,只需使用字符串函数 LOWER().. aka on LOWER(t1.genes) = LOWER(bvi_exp.genename)

标签: sql postgresql join


【解决方案1】:

试试这个

select t1.* ,bvi_d_exp,bvi_r_exp,bvi_exp.bvi_lr_rvd
into Patient_bvi_p_exp
from
(select *, LOWER(split_part(id4, '@', 3) ) genes
from patient_bvi_p) t1
inner join 
(select LOWER(genename),bvi_d_exp,bvi_r_exp,bvi_lr_rvd
from geneexpression17p) bvi_exp
on t1.genes=bvi_exp.genename

或者这个

select t1.* ,bvi_d_exp,bvi_r_exp,bvi_exp.bvi_lr_rvd
into Patient_bvi_p_exp
from
(select *, split_part(id4, '@', 3)genes
from patient_bvi_p) t1
inner join 
(select genename,bvi_d_exp,bvi_r_exp,bvi_lr_rvd
from geneexpression17p) bvi_exp
on LOWER(t1.genes)=LOWER(bvi_exp.genename)

【讨论】:

  • @rofls 很好,如果 OP 会发布一些相关数据,我可以对其进行测试以确保它有效:)
  • 如果他再次访问该站点,他将有一个解决方案:)
  • @rofls 我认为如果您在连接条件或选择内使用 LOWER 并不重要,因为在任何一种情况下都使用相同的字符串..但我必须进行测试才能确定
【解决方案2】:

如果您在加入期间将t1.genesbvi_exp.genename 转换为小写,您应该没问题:

select t1.* ,bvi_d_exp,bvi_r_exp,bvi_exp.bvi_lr_rvd
into Patient_bvi_p_exp
from
(select split_part(id4, '@', 3)genes,*
from patient_bvi_p) t1
inner join 
(select genename,bvi_d_exp,bvi_r_exp,bvi_lr_rvd
from geneexpression17p) bvi_exp
on lower(t1.genes)=lower(bvi_exp.genename)

【讨论】:

  • 很容易复制我的评论
  • 我正在写那个对不起。先生,我也知道 SQL。不像上面那个似乎抄袭了我们俩的人..:/哈哈
  • 我通常也不会在发布答案之前查看是否有评论。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多