2016-06-28 36 views
-1

我将文件中的值复制到我创建的数据库的一个表中,以便用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(或类似的东西),因为在对应F1 f2的相等的值等于值。

实施例2

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

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

实施例3

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

在本实施例3的查询应该回答我在两个方向F1-> f2和[2-> F1 TRUE。

谢谢大家的帮助,我希望已经清楚,当然,我为我的坏英语道歉。

+0

目前尚不清楚,至少没有给我。 '因为在第一个例子中,等于f1的值等于f2的等值,但在f1和f2之间根本没有相等的值,除非你在讨论f1和f2具有相同值的不同行。即便如此,您是否想要为所有数据或只是那些特定的行返回true还不清楚。请澄清。 –

+0

谢谢您的评论,并对我的糟糕解释感到抱歉。 我试着做得更好: 请求:回答TRUE(或等效)当且仅当在表f1中相同值的表中的每个记录对应于字段f2中的相同值时。 示例2为False,因为在f1中存在两个具有相同值的记录,但在f2中具有不同值。 – Marco

+0

如果你有这种情况:'a | x; ž| Y; ç|一个; a | c'如何知道等价是否在a与x或a与c之间?如果这没有关系,你将不得不检查每行与其他所有行,做一个交叉连接验证一行到另一个。 –

回答

0

你可以在SELECT DISTINCT的resuling行使用工会是这些不符合

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  
0

尝试这个位置。我统计所有行,并将其与f1等于f2的行中的SUM进行比较。它返回TRUE或FALSE作为字符串,但您可以将其更改为所有0,1

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

这似乎是错误的 - 它不是f1 = f2的问题,但f2值是否对于每个f1都是不同的。 –

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