2016-01-19 107 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