2016-06-28 38 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; 
相關問題