我将文件中的值复制到我创建的数据库的一个表中,以便用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中回答我为真。
感谢所有人的帮助,我希望已经足够清楚了,当然,我为我糟糕的英语道歉。
答案 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;