簡體   English   中英

MySQL將2個表中的數據合並到第3個表中

[英]MySQL Combining data from 2 tables into 3rd table

我目前有2個表:

CrawlData
id (autoincrement), Source, Destination, and some more columns

Nodes
id (autoincrement), URL

Nodes表包含來自CrawlData的不同Source值

現在我想有一個表是一種查找表,其中包含來自節點的ID而不是來自CrawlData的源和目標中的文本

我可以使用在URL = Source和URL = Destination上使用Join的Select查詢來獲取所有ID,但是不知道如何組合這些ID,然后還要將它們放在新表中,帶有2列的

  • SourceNode(=來自節點的id,其中CrawlData.Source = URL)
  • DestinationNode(=來自節點的id,其中CrawlData.Destination = URL)

你可以INSERT通過返回的記錄SELECT using語句INSERT INTO...SELECT語句。

INSERT INTO Edges(SourceNode, DestinationNode)
SELECT  b.ID SourceNode,
        c.ID DestinationNode
FROM    CrawlData a
        INNER JOIN Nodes b
            ON a.Source = b.URL
        INNER JOIN Nodes c
            ON a.Destination = c.URL

要進一步了解聯接,請訪問以下鏈接:

為了更快地執行,請執行以下語句以在列上添加INDEX以避免FULL TABLE SCAN ,如果在大型RDBMS上執行,這可能會很慢。

ALTER TABLE Nodes ADD INDEX (URL);

如果在Nodes.URL上出現SourceDestination列的所有值, Nodes.URL這些列聲明為外鍵,

ALTER TABLE CrawlData 
      ADD CONSTRAINT cd_fk1 FOREIGN KEY (Source) REFERENCES Nodes(URL)
ALTER TABLE CrawlData 
      ADD CONSTRAINT cd_fk2 FOREIGN KEY (Destination) REFERENCES Nodes(URL)

否則,在它們上添加正常索引

ALTER TABLE CrawlData ADD INDEX (Source);
ALTER TABLE CrawlData ADD INDEX (Destination);

您可以兩次加入Nodes表。 一次,使用Source加入URLK。 下次使用目的地。

從概念上講,它就像使用Nodes表的兩個副本,每個副本具有不同的名稱(例如“S”和“D”)。 你得到:

select S.ID As SOURCE_ID, D.ID As DEST_ID
from CrawlData
join Nodes S on Source = S.URL
join Nodes D on Destination = D.URL

暫無
暫無

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

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