2016-08-01 66 views
0

表1:MySQL查詢2表與循環值

code | value1 | date1 
515 | MD001 | 2016-07-01 
515 | MD002 | 2016-07-03 
612 | UD005 | 2016-08-01 
612 | UD006 | 2016-08-03 
612 | UD007 | 2016-08-06 

表2:

code | value2 | date2 
515 | FC003 | 2016-07-02 
515 | FC004 | 2016-07-04 
612 | QQ008 | 2016-08-02 
612 | QQ009 | 2016-08-04 

所需的查詢輸出是:

Code | Value1 | date1  | value2 | date2 
515 | MD001 | 2016-07-01 | FC003 | 2016-07-02 
515 | MD002 | 2016-07-03 | FC004 | 2016-07-04 
612 | UD005 | 2016-08-01 | QQ008 | 2016-08-02 
612 | UD006 | 2016-08-03 | QQ009 | 2016-08-04 
612 | UD007 | 2016-08-06 |  | 

我嘗試查詢但結果始終在'value2'中循環。你能幫助我嗎?

+0

使用mysqli_query兩次。問題出在哪裏? –

回答

0
SELECT 
firstTable.code, 
firstTable.value1, 
firstTable.date1, 
secondTable.value2, 
secondTable.date2 
FROM 
(
    SELECT 
    T1.*, 
    @rn1 := @rn1 + 1 AS row_number 
    FROM Table1 AS T1 
    CROSS JOIN (SELECT @rn1 := 0) AS var 
) AS firstTable 

LEFT JOIN 
(

    SELECT 
    T2.*, 
    @rn2 := @rn2 + 1 AS row_number 
    FROM Table2 AS T2 
    CROSS JOIN (SELECT @rn2 := 0) AS var 
) AS secondTable 
ON firstTable.code = secondTable.code AND firstTable.row_number = secondTable.row_number; 

注:簡單內連接在這種情況下是不夠的。

這就是爲什麼枚舉每個表中的行併爲每條記錄分配行號是第一項任務。

後來在coderow number這兩個枚舉表之間做出inner join會生成預期的結果集。

+0

結果只有1行 – Anda

+0

請立即嘗試。 – 1000111

0

選擇不同的碼,值1,DATE1,值2,DATE2 從表1爲t1
加入表2作爲t1.code = t2.code T2;

+0

不幸的是,這個查詢將爲這組輸入返回4行。 – 1000111

+0

此查詢將返回「value2」中的同一行 – Anda