2015-04-02 50 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; 
相關問題