2013-08-16 51 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