2015-04-02 51 views
0

我有两个不相关的表,但我想将它们加入到一个查询中,这可能吗?是否有可能在MySQL中加入两个无关的表?

这是我做到了使用交叉连接,但它没有工作

table 1 
| ID | Amount | 
| 1 | 20  | 
| 2 | 10  | 
| 3 | 21  | 
| 4 | 50  | 


table 2 
| ID  | Paid Value  | 
| 011  |  5   | 
| 052  |  2   | 

//我试图查询

SELECT 
    a.`Amount`, 
    b.`Paid Value` 
FROM 
    `table 1` a 
CROSS JOIN 
    `table 2` b 

这是我使用上面的查询

得到回报
| ID | Amount | Paid Value | 
| 1 | 20  | 5   | 
| 2 | 10  | 2   | 
| 3 | 21  | 5   | 
| 4 | 50  | 2   | 

但这是我的预期结果

| ID | Amount | Paid Value | 
| 1 | 20  | 5   | 
| 2 | 10  | 2   | 
| 3 | 21  | 0   | 
| 4 | 50  | 0   | 
+1

SQL表示代表* unordered *集合。你关心哪些行匹配?如果是这样,你需要一些指定顺序的东西。此外,你的交叉连接应该返回8行,而不是4. – 2015-04-02 11:12:20

+0

退出呼叫。你似乎从根本上误解了什么表。它们不是词法排序的列表,就像在一张纸上绘制的数据表一样。它们是数据的关系,在存储中没有固有的行排序。你的尝试和你的要求都背叛了这里的缺乏理解。 – 2015-04-02 11:17:17

回答

1

您想通过一些隐式行号进行连接。让我假设这是基于id的排序。您可以使用变量来计算行号,然后将其用于连接:

select t1.id, t1.amount, coalesce(t2.paidvalue, 0) 
from (select t1.*, (@rn := @rn + 1) as rn 
     from table1 t1 cross join 
      (select @rn := 0) vars 
     order by id 
    ) t1 left join 
    (select t2.*, (@rn2 := @rn2 + 1) as rn 
     from table1 t2 cross join 
      (select @rn2 := 0) vars 
     order by id 
    ) t2 
    on t1.rn = t2.rn; 
相关问题