Mysql 检查列中的值是否一致映射到另一列中
我将文件中的值复制到我创建的数据库的一个表中,以使用sql语言查询数据。Db不是标准格式,我只是将值复制到字段中 事实上,首先,我会通过查询检查我拥有的数据是否在这个意义上是一致的:字段f1的相同值对应于每个记录的相同f2值 f1的不同值也可能与f2中的相同值关联,这不是问题;显然,如果检查在两个方向(f1->f2和f2->f1)都是正的,这意味着这两个字段是一对一的 例1Mysql 检查列中的值是否一致映射到另一列中,mysql,sql,Mysql,Sql,我将文件中的值复制到我创建的数据库的一个表中,以使用sql语言查询数据。Db不是标准格式,我只是将值复制到字段中 事实上,首先,我会通过查询检查我拥有的数据是否在这个意义上是一致的:字段f1的相同值对应于每个记录的相同f2值 f1的不同值也可能与f2中的相同值关联,这不是问题;显然,如果检查在两个方向(f1->f2和f2->f1)都是正的,这意味着这两个字段是一对一的 例1 id | f1 | f2 1 | a | x 2 | b | y
id | f1 | f2
1 | a | x
2 | b | y
3 | a | x
4 | c | x
在本例1中,查询的答案应该是TRUE(或类似的东西),因为at等于f1的值对应于f2的值
例2
id | f1 | f2
1 | a | x
2 | b | y
3 | a | z
4 | c | x
在本例2中,查询的答案应该是FALSE(或类似的东西),因为f1的at equals值对应于f2的不同值
例3
id | f1 | f2
1 | a | x
2 | b | y
3 | a | x
4 | c | z
在本例3中,查询应在f1->f2和f2->f1两个方向上回答我TRUE
谢谢大家的帮助,我希望已经说得够清楚了,当然,我为我的英语不好道歉。你可以在select distinct上使用union,结果行是不匹配的
select f1 from
( select distinct f1, f2
from my_table ) t1
group by f1
having count(*) >1
union
select f2 from
( select distinct f1, f2
from my_table ) t2
group by f2
having count(*) >1
试试这个。我计算所有行,并将其与f1等于f2的行的和进行比较。它以字符串形式返回TRUE或FALSE,但您可以将其全部更改为0,1
SELECT
IF( count(id) = SUM(IF(f1=f2,1,0)), 'TRUE', 'FALSE') as result
FROM yourTable;
不清楚,至少对我来说不清楚
因为f1的at equals值对应于f2的equals值。
对于第一个示例,但是f1和f2之间根本没有相等的值,除非您谈论的是f1和f2具有相同值的不同行。即使如此,也不清楚是要为所有数据返回true,还是仅为那些特定行返回true。请澄清。谢谢你的评论,很抱歉我的错误解释。我试图做得更好:request:answer TRUE(或等效值),当且仅当表中的每个记录在字段f1中的相同值对应于字段f2中的相同值时。示例2为False,因为存在两条记录,它们在f1中的值相同,但在f2中的值不同;z|y;c|a;a | c如何知道a和x或a和c之间是否相等?如果这不重要,您将不得不检查每一行与所有其他行,进行交叉连接以验证每一行。在您的示例中,答案应该为FALSE,因为字段f1中有(至少)两个值相同的记录,而字段f2中有不同的值。这似乎是错误的——这不是f1=f2的问题,但对于每个f1,f2值是否都不同。
SELECT IF(MAX(ct) = 1, 'TRUE', 'FALSE')
FROM (
SELECT f1,
COUNT(DISTINCT f2) AS ct -- hoping for only 1
FROM my_table
GROUP BY f1
) AS c;