如何在MySQL中使用区间比较创建表之间的关系?

时间:2016-09-18 22:24:17

标签: mysql

我想基于一个表中的值是否落入另一个表中的一个区间来创建两个表之间的关系。一个表1是~16000行:

name     | start        | end
-----------------------------------------
someName | startPosition | endPosition

表2是~20000000行:

id      | location
--------------------------
someID  | positionInteger

每个id都落在一个名称的间隔中,但每个名称可以包含许多与之关联的ID。

我想在表2中添加一个新索引,使其成为:

id      | location        | name
---------------------------------
someID  | positionInteger | someName

我尝试过:

ALTER TABLE table2 ADD INDEX name (name);

有了一点python,我可以获取数据库中的所有名称,然后获取每个名称和间隔:

SELECT someID FROM table2 WHERE location >= startPosition AND location <= endPosition 

然后我可以遍历生成的ID并:

UPDATE table2 SET name = 'someName' WHERE id = 'someID'

这有效,但速度很慢。是否有更有效的方法使用MySQL并避免多个循环?

2 个答案:

答案 0 :(得分:0)

加入表格

cxt.Students.Add(st);

您不应该向表2添加索引,您应该添加一列:

SELECT t2.id, t2.location, t1.name
FROM Table1 AS t1
JOIN Table2 AS t2 ON t2.location BETWEEN t1.startPosition AND t1.endPosition

然后,您可以使用类似的连接更新所有行:

ALTER TABLE Table2 ADD COLUMN name VARCHAR(32); -- Replace this with the actual size

答案 1 :(得分:0)

您可以使用enter the gallons used: 12.8 enter starting mileage: 0 enter ending mileage: 277 Miles Driven: 277 Miles Per Gallon: 21.6406 enter the gallons used: -1 enter starting mileage:

LEFT JOIN

更多详情http://sqlfiddle.com/#!9/721e5/1