前幾天求助了一個問題,得到版主唐詩三百首和大神rink_1的熱心幫助,原貼:https://bbs.csdn.net/topics/396990344
覺得rink_1的方法能滿足要求,想再修改套用:目的不變,但是是用兩個表資料的個位數來判斷,可是查詢時間太長,請幫忙看看是不是套用錯了。命令如下:
WITH CTE_1
AS
(
SELECT A,'A%10' AS NAME FROM TBM UNION ALL
SELECT B,'B%10' FROM TBM UNION ALL
SELECT C,'C%10' FROM TBM UNION ALL
SELECT D,'D%10' FROM TBM UNION ALL
SELECT E,'E%10' FROM TBM UNION ALL
SELECT F,'F%10' FROM TBM),
CTE_2
AS
(SELECT*,ROW_NUMBER()OVER (ORDER BY GETDATE())AS SEQ FROM TBN),
CTE_3
AS
(
SELECT SEQ,A,'A%10' AS NAME FROM CTE_2 UNION ALL
SELECT SEQ,B,'B%10' FROM CTE_2 UNION ALL
SELECT SEQ,C,'C%10' FROM CTE_2 UNION ALL
SELECT SEQ,D,'D%10' FROM CTE_2 UNION ALL
SELECT SEQ,E,'E%10' FROM CTE_2 UNION ALL
SELECT SEQ,F,'F%10' FROM CTE_2)
SELECT DISTINCT A.* FROM
CTE_2 A
JOIN
(SELECT SEQ,STUFF((SELECT'-'+NAME FROM CTE_3 WHERE A.A=A AND A.SEQ=SEQ ORDER BY NAME FOR XML PATH('')),1,1,'') AS EXPRESS
FROM CTE_3 A) AS B ON A.SEQ=B.SEQ
LEFT JOIN
(SELECT*,STUFF((SELECT'-'+NAME FROM CTE_1 WHERE A.A=A ORDER BY NAME FOR XML PATH('')),1,1,'') AS EXPRESS
FROM CTE_1 A) AS C ON B.EXPRESS=C.EXPRESS
WHERE C.NAME IS NULL
GO
uj5u.com熱心網友回復:
建議提供表結構, 測驗資料, 處理邏輯和希望結果.uj5u.com熱心網友回復:
你這邏輯沒看懂,只能猜一個。按你的寫法是把6個欄位中相同數值的個位數進行拼接,然后按拼接后的值進行left join,但是個位數相同的不同數字出現的概率很高,這樣就可能造成left join后的資料集很大,所以可能就慢。比如 [16,16,22,22,16] 和 [36,12,36,12,36]這2個也算滿足條件的。你應該還是以A、B、C、D、E、F來區分欄位的順序位置,只是以原欄位值的個位數來作為欄位值是否相同的判斷依據。
比如
WITH CTE_1
AS
(
SELECT A%10 AS A,'A' AS NAME FROM TBM UNION ALL
SELECT B%10,'B' FROM TBM UNION ALL
SELECT C%10,'C' FROM TBM UNION ALL
SELECT D%10,'D' FROM TBM UNION ALL
SELECT E%10,'E' FROM TBM UNION ALL
SELECT F%10,'F' FROM TBM),
uj5u.com熱心網友回復:
如下4條記錄:
81 , 102 , 223 , 13 , 132 , 132
531 , 61 , 92 , 92 , 762 , 343
563 , 623 , 163 , 561 , 600 , 56
315 , 345 , 789 , 632 , 575 , 1840
除10后的余數如下:
1 2 3 3 2 2
1 1 2 2 2 3
3 3 3 1 0 6
5 5 9 2 5 0
除10余數中,第1條記錄cd相同、bef相同;第2記錄ab相同、cde相同;第3記錄abc相同;第4組ab相同。
表TBM、TBN均為6列int欄位:a,b,c,d,e,f, 其中TBM只有一條記錄,TBN記錄數萬條。TBM的值 除10 后的余數 有1組或2組相同,但是位置不確定。
假如TBM中是上面第2組資料,那么想從TBN中洗掉的資料是:除10后的余數ab相同并且cde相同,如:
535 , 65 , 90 , 90 , 760 , 343
522 , 62 , 66 , 66 , 736 , 345
假如TBM中是上面第3組資料,那么想從TBN中洗掉的資料是:除10后的余數abc相同,如:
535 , 65 , 95 , 90 , 761 , 343
528 , 68 , 68 , 66 , 737 , 345
假如TBM中是上面第3組資料,那么想從TBN中洗掉的資料是:除10后的余數ab相同,如:
535 , 65 , 99 , 90 , 761 , 343
528 , 68 , 69 , 66 , 737 , 345
uj5u.com熱心網友回復:
最下面是第4組,忘改了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/9820.html
標籤:疑難問題
上一篇:資料庫 嚴重錯誤 823 ,網上搜索了很多方法都沒有徹底解決,希望兄弟們看看幫幫忙
下一篇:python問題
