Mysql 检查列中的值是否一致映射到另一列中

Mysql 检查列中的值是否一致映射到另一列中,mysql,sql,Mysql,Sql,我将文件中的值复制到我创建的数据库的一个表中,以使用sql语言查询数据。Db不是标准格式,我只是将值复制到字段中 事实上,首先,我会通过查询检查我拥有的数据是否在这个意义上是一致的:字段f1的相同值对应于每个记录的相同f2值 f1的不同值也可能与f2中的相同值关联,这不是问题;显然,如果检查在两个方向(f1->f2和f2->f1)都是正的,这意味着这两个字段是一对一的 例1 id | f1 | f2 1 | a | x 2 | b | y

我将文件中的值复制到我创建的数据库的一个表中,以使用sql语言查询数据。Db不是标准格式,我只是将值复制到字段中

事实上,首先,我会通过查询检查我拥有的数据是否在这个意义上是一致的:字段f1的相同值对应于每个记录的相同f2值

f1的不同值也可能与f2中的相同值关联,这不是问题;显然,如果检查在两个方向(f1->f2和f2->f1)都是正的,这意味着这两个字段是一对一的

例1

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;