2016-01-19 106 views
0

我有某種含表大量數字信息的: 例如,對於表的一個我有這樣的價值觀查找範圍SQL複製

CREATE TABLE `mdacardrange` (
    `rID` decimal(20,0) NOT NULL DEFAULT '0', 
, 
    `range_begin` varchar(254) DEFAULT NULL, 
    `range_end` varchar(254) DEFAULT NULL, 

    PRIMARY KEY (`rID`), 

); 

INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (1,'4567890000000000000','4567899999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (2,'5264800000000000000','5264809999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (3,'5193060000000000000','5193069999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (4,'5482150000000000000','5482159999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (5,'5416710000000000000','5416719999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (6,'5167340000000000000','5167349999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (7,'4043090000000000000','4043099999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (8,'4043110000000000000','4043119999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (9,'4226060000000000000','4226069999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (10,'4043100000000000000','4043109999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (11,'4063710000000000000','4063719999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (12,'4098050000000000000','4098059999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (15,'4779040000000000000','4779049999999999999'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (16,'5223050000000000000','5223059999999999999'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (17,'4703770000000000000','4703779999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (18,'5483930000000000000','5483939999999999000'); 
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (19,'5341480000000000000','5341489999999999999'); 

我的任務就是比較這個數據範圍的重複。不幸的是,我甚至不知道如何處理這樣的數據,據我所知,我需要計算每行的整個範圍,然後比較,有人可以幫我解決這個問題嗎?

+0

你給了一些示例數據,這是很好的。你期望得到的結果是什麼。如果你提供了一些示例結果,其他人可以更容易地說:這是你將它們視爲重複的列表,以及爲什麼 – SIDU

+0

你是說你想知道是否有任何範圍重疊?重複的意思是什麼? – Taraz

+0

對不起,我需要找到範圍內的重複項,例如,第一個輸入範圍是從100到200,第二個是從201到300,第三個是從299到400的值,我需要從最後找到299-300條目。並將其標記爲全部 – Vakho

回答

0

你CREATE TABLE包含幾個錯別字......

我覺得這樣的事情應該工作:

SQL> select 
     a.*, b.rID as overlapped_id 
    from 
     mdacardrange a inner join mdacardrange b on 
      a.range_begin < b.range_end and 
      a.range_end > b.range_begin and 
      a.rID <> b.rID 
    ; 
+0

良好的使用交叉連接。儘管MySQL允許沒有ON子句的INNER JOIN,但其他RDMS可能不符合。考慮'CROSS JOIN',或簡單的帶有逗號分隔符的表列表,以供將來的讀者使用通用SQL解決方案。另外,請注意範圍值存儲爲字符串。考慮在sql中進行類型轉換,因爲字符串的字典等效順序可能與數字值的順序不同,特別是對於數字長度差異:1> 101> 2> 201 ... – Parfait