检查列中的值是否相干地映射到另一列

时间:2016-06-28 14:55:14

标签: mysql sql

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

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

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

示例1

id |   f1   |   f2
1  |   a    |   x 
2  |   b    |   y     
3  |   a    |   z     
4  |   c    |   x     

在这个示例1中,查询应该回答我为TRUE(或类似的东西),因为在等于f1的值对应于f2的相等值。

示例2

id |   f1   |   f2
1  |   a    |   x 
2  |   b    |   y     
3  |   a    |   x     
4  |   c    |   z   

在这个例子2中,查询应该回答我FALSE(或类似的东西),因为在等于f1的值对应不同的f2值。

示例3

 session_start();

在此示例3中,查询应在方向f1-> f2和f2-> f1中回答我为真。

感谢所有人的帮助,我希望已经足够清楚了,当然,我为我糟糕的英语道歉。

3 个答案:

答案 0 :(得分:0)

你可以在select上使用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      

答案 1 :(得分:0)

在这里试试。我计算所有行并将其与来自f1等于f2的行的SUM进行比较。它以字符串形式返回TRUE或FALSE,但您可以将其更改为全部0,1

SELECT
  IF( count(id) = SUM(IF(f1=f2,1,0)), 'TRUE', 'FALSE') as result
FROM yourTable;

答案 2 :(得分:0)

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;
相关问题