2013-08-16 43 views
1

就像標題所說的,我想加入2個沒有鍵的表來比較。MYSQL沒有鍵/索引的加入表

mysql join tables without keys

這個例子descripes初始狀態,但他正在尋找笛卡爾乘積。 我想是這樣的

Table 1: t1 
red 
blue 
big 
small 


Table 2: t2 
cat 
dog 
person 

結果應該是這樣的:

red cat 
blue dog 
big person 
small NULL <--- can be empty (not shown) 

是這樣的可能只是用sql?

+0

那麼匹配一個表中的任何行與另一個表中的任何行? – Barmar

+0

嘗試使用ke加入,否則它無用的加入表,如果是這樣的話,只需使用單個表來存儲數據。 – maXfenda

+1

對兩個表中的行進行排序,在排名值上加入(可能使用完全外部聯接)。在MySQL中,對於排名或完整聯接沒有本地支持,但存在解決方法。 –

回答

4

由於MySQL沒有一個ROW_ID()功能,你必須僞造它與你增加一個用戶變量:

select adjective, noun 
from (select @counter1 := @counter1+1 as counter, adjective 
     from table1, (select @counter1 := 0) init) t1 
left join (select @counter2 := @counter2+1 as counter, noun 
      from table2, (select @counter2 := 0) init) t2 
using (counter) 

DEMO

注意,這個假設總是有更多的形容詞table1比table2中的名詞。如果您需要允許任一表格變小,則需要使用full outer join。正如Andriy M所提到的,MySQL沒有內置的支持,但是如果你搜索的是SO或者谷歌,你應該想辦法編寫它。

+0

幹得好,這就是我一直在尋找的東西:D。我甚至不知道「使用」出口 – alabama

+1

'USING(counter)'只是簡寫爲'ON t1.counter = t2.counter' – Barmar

+1

是的,只是讀取文件。一個區別: 「select *」來自與USING的連接,連接列只出現在結果集中一次。開啓時,它會出現兩次。 – alabama