2012-03-03 43 views
1

我想用Matlab做一個SQL風格的連接。我可以通過創建數據集(統計工具箱),做加盟,轉換回並再次刪除數據集做:MATLAB:SQL風格的連接操作

A1 = [10 10 20 20 30 30 50 50]'; 
B1 = (10:10:70)'; 
B2 = (1:7)'; 

dsA = dataset({A1, 'Key'}); 
dsB = dataset({B1, 'Key'}, {B2, 'Idx'}); 
dsA = join(dsA, dsB, 'key', 'Key'); 

結果:

Key Idx 
10  1 
10  1 
20  2 
20  2 
30  3 
30  3 
50  5 
50  5 

我的問題:是否有這樣做的另一種方式,沒有使用數據集,也沒有for循環

非常感謝您的幫助!

+0

我知道MATLAB和我知道SQL,但我不明白你的問題(至少容易!)。忘記數據集,只需在普通的matlab中你想要什麼?你想從A1和B1到B2?在sql中連接是一種使用共享密鑰查找和合並一個表(向量在這裏)的元素的方法。 – Ali 2012-03-03 18:22:44

+0

我想要的是: SELECT A1,B2 from A,B WHERE A1 = B1; 這是Amro提出的解決方案。 – Janosch 2012-03-06 11:28:37

回答

2

對於你的榜樣,你可以簡單地使用ISMEMBER

[~,loc] = ismember(A1,B1); 
dsA = [B1(loc) B2(loc)] 

結果:

dsA = 
    10  1 
    10  1 
    20  2 
    20  2 
    30  3 
    30  3 
    50  5 
    50  5 

注:這是假定在A1所有元素B1被發現。如果情況並非總是如此,你可以使用ISMEMBER的第一輸出loc過濾零值...

+0

謝謝!我並沒有意識到祿的論點。 – Janosch 2012-03-06 11:31:15