2016-08-01 67 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