在R中無數次嘗試處理大型(3-35gb)csv文件後,我已經轉移到SQL來處理這些數據集。所以我在R環境中使用這段代碼(使用基於SQlite的RSQLite包),但它不應該減少我的SQL問題!SQL - 根據另一個表中給出的匹配值在一個表中進行選擇
我的問題:如何根據另一個表中給出的匹配值來選擇一個表?
我想通過示例來解釋。我有以下表格格式:
「數據」表
Symbol| Value| EX
A | 1 | N
A | 1 | N
A | 2 | T
A | 3 | N
A | 4 | N
A | 5 | N
B | 1 | P
B | 2 | P
B | 2 | N
B | 2 | N
B | 3 | P
B | 5 | P
B | 6 | T
...
我想選擇其中符號和交換值匹配,根據一定的條件在給定的所有條目下面的示例表。
「Symbolexchange」 表:
Ticker| Exchange
A | N
B | P
...
(注意:符號和股票指的是同一屬性,也EX和交易所指的是同一屬性)
因此,我所瞄準的輸出是這樣,它只保留A條目交換是N等:
Symbol| Value| EX
A | 1 | N
A | 1 | N
A | 3 | N
A | 4 | N
A | 5 | N
B | 1 | P
B | 2 | P
B | 3 | P
B | 5 | P
...
我能通過兩種方法做到這一點,雖然我對它們並不滿意。
此方法在原始表旁邊的列中添加引用表,這是冗餘的。
SELECT *
FROM Data
INNER JOIN Symbolexchange
ON Data.EX=Symbolexchange.EXCHANGE
AND Data.SYMBOL=Symbolexchange.TICKER
此方法也直接完成工作,但比上面慢。
SELECT *
FROM Data
WHERE EX=(SELECT exchange FROM Symbolexchange WHERE ticker = SYMBOL)
是否有更好更快的方式來編程嗎?由於我的數據集的大小,速度非常重要。任何其他意見我的代碼歡迎!
謝謝
第二個sql語句只會匹配'EX'。你想要嗎?你不需要匹配'Symbol'和'Ticker'? – unlimit
是的你是對的,我只想匹配基於表Symbolexchange的'EX'。因此,對於股票代碼A,我只想選擇Exchange爲N的行。對於股票代碼B,我只想選擇Exchange是P的行。 – Hugstime
有兩個問題:1)這是什麼DBMS? (不同的性能建議差異很大),以及2)您是否在這些表中定義了任何鍵或索引? – RBarryYoung