簡體   English   中英

如何在MySQL中使用間隔比較在表之間創建關系?

[英]How do I create a relation between tables using an interval comparison in MySQL?

我想基於一個表中的值是否落在另一個表中的間隔中來創建兩個表之間的關系。 一個表1是〜16000行:

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

表2是約2000萬行:

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並避免多個循環的更有效方式?

參加桌子

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

您不應在表2中添加索引,而應添加一列:

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

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

UPDATE Table2 AS t2
JOIN Table1 AS t1 ON t2.location BETWEEN t1.startPosition AND t1.endPosition
SET t2.name = t1.name

您可以使用LEFT JOIN

SELECT id,location,name FROM table2 as t2 
LEFT JOIN table1 as t1 
ON t2.location BETWEEN t1.`start` AND t1.`end`;

更多詳細信息http://sqlfiddle.com/#!9/721e5/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM