一个非常简单的SQL语句将返回两行,而不是我期望的行。

select distinct(F_NAME) from tab2 where F_NAME like '%SMITH%'

F_NAME
CLAIRE_SMITH
CLAIRE_SMITH


文本是相同的,尝试使用小写字母,修剪和其他一些文本功能,以查看是否可以找到区别,但没有乐趣。我还通过手工和使用更新功能重新输入了数据。我还检查了字符编码,以确保没有奇怪的事情发生,都是varchar(90)latin1_general_ci

该名称实际上存在于我正在查看的两个表中,在tab1表中大约有5行,在tab2中有100行

当将^ 1 tab1tab2表连接在一起但结果中未出现F_NAME=F_NAME和CLAIRE_SMITH时,却发现了问题,但返回了tab1tab2中的每个其他人。

^ 1右连接,隐式连接,左连接,右连接,左外部连接和右外部连接。

tab1

F_NAME, F_DEPTNO, F_AGE
CLAIRE_SMITH, 1, 17
BOB_JONES, 2, 37,
SUE_JENKINS, 2, 29,


tab2

F_ID, F_NAME, F_VALUE1, F_VALUE2, F_VALUE3
1, CLAIRE_SMITH, 10, 11, 15
2, BOB_JONES, 15, 11, 15
3, SUE_JENKINS, 20, 13, 14
4, CLAIRE_SMITH, 10, 11, 15
5, BOB_JONES, 15, 11, 15
6, SUE_JENKINS, 20, 13, 14


我想做的是将tab2中的值相加并按F_NAME分组,同时添加tab1中的某些值,不幸的是,它们不是tab2中的外键,我可以用它来辅助连接和数据按原样提供,我需要使用的全部内容。

我的查询会为除未出现的CLAIRE_SMITH以外的所有其他人正确输出。

SELECT a.F_DEPTNO, a.F_NAME, sum(b.F_VALUE1), sum(b.F_VALUE2), sum(b.F_VALUE3)
FROM TAB1 a, TAB2 b WHERE a.F_NAME=b.F_NAME
GROUP BY a.F_ID, a.F_NAME
ORDER BY a.F_ID ASC


谁能解释会发生什么?
1)名称似乎相同,但作为两个不同的实例返回
2)加入不包括此人。

谢谢

最佳答案

采用

select hex(F_NAME) from tab2 where F_NAME like '%SMITH%'


为了找到差异。

hex function返回一个十六进制的字符串表示形式,因此任何不可见的(即空格)都会显示出来。

关于mysql - 如何避免丢失行?和奇怪的情况下,Distinct无法在mysql中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23985593/

10-10 11:14