表SQL
CREATE TABLE a
(id INT PRIMARY KEY,
p1 INT, p2 INT, p3 INT, .. , p15 INT)
P(n)的取值在這裏,我們比較的條目比較條目與型動物的參數從0到2
我得與parameteres的唯一組合的所有條目。這並不困難,所以我創建了這樣的表格
CREATE TEMPORARY TABLE b AS
(SELECT
t1.id,
t2.p1, t2.p2, t2.p3, t2.p4, t2.p5, t2.p6, t2.p7, t2.p8,
t2.p9, t2.p10, t2.p11, t2.p12, t2.p13, t2.p14, t2.p15
FROM
(
SELECT
p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
FROM
a
GROUP BY
p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
HAVING COUNT(*) = 1
)t2
LEFT JOIN a t1 on
t2.p1 = t1.p1
AND t2.p2 = t1.p2
AND t2.p3 = t1.p3
AND t2.p4 = t1.p4
AND t2.p5 = t1.p5
AND t2.p6 = t1.p6
AND t2.p7 = t1.p7
AND t2.p8 = t1.p8
AND t2.p9 = t1.p9
AND t2.p10 = t1.p10
AND t2.p11 = t1.p11
AND t2.p12 = t1.p12
AND t2.p13 = t1.p13
AND t2.p14 = t1.p14
AND t2.p15 = t1.p15)
在這裏,我們得到了獨特的參數組合。
下一步是針對表A中的每條記錄查找表B中的所有記錄,這些記錄相差一個,兩個和三個參數。記錄由單個參數差異應該不超過一個,記錄兩個不同的參數應用不超過兩個等
例如更多:
id | p(n)
-----+----------------
1 |000000000000000
2 |000000000000001
我創建的形式的一個臨時表
CREATE TEMPORARY TABLE c AS
(
SELECT
cnt, id1, id2
FROM
(
SELECT
(t1.p1 = t2.p1)+(t1.p2 = t2.p2)
+(t1.p3 = t2.p3) +(t1.p4 = t2.p4) +(t1.p5 = t2.p5)
+(t1.p6 = t2.p6) +(t1.p7 = t2.p7) +(t1.p8 = t2.p8)
+(t1.p9 = t2.p9) +(t1.p10 = t2.p10) +(t1.p11 = t2.p11)
+(t1.p12 = t2.p12) +(t1.p13 = t2.p13) +(t1.p14 = t2.p14)
+(t1.p15 = t2.p15) AS cnt,
t1.id id1,
t2.id id2
FROM
b AS t1,
a AS t2
)
WHERE
(cnt BETWEEN 12 AND 14)
AND (id1 < id2)
)
在這裏,我得到一個表對有不同的1,2和3參數
但我碰到了表中的問題條目相當多的約100,000條目。該表格太大(在家用PC上處理過的數據)並且創建表格的時間很長。
也許這是獲得一切的唯一方法,但任何人都可以有解決這個問題的分析方法比蠻力夫婦(也許不是SQL)的任何想法。當然,這將得到更快的解決...
任何提示將不勝感激!謝謝!
不太什麼,我需要...... 我必須擺脫所有具有的參數相同的組合條目和這樣不僅能消除重複 –