如何将两个表与不存在的行连接起来

时间:2015-04-16 04:51:01

标签: mysql sql database

我有两张桌子

架构表:

ID | ITEM
-----------
01  | i1 
02  | i2 
03  | i3 

记录表:

RecordID | ITEM | VALUE
---------------------- 
RE001    | i1   | 100  
RE002    | i2   | 102  
RE003    | i1   | 200  
RE003    | i2   | 220  

我想得到一个看起来像这样的结果表

RecordID | ITEM | VALUE
 ---------------------- 
RE001    | i1   | 100  
RE001    | i2   | null  
RE001    | i3   | null  
RE002    | i1   | null  
RE002    | i2   | 102 
RE002    | i3   | null  
RE003    | i1   | 200 
RE003    | i2   | 220  
RE003    | i3   | null  

我尝试使用LEFT JOINCROSS JOIN,这些返回我的合并行 同一项为空

有没有方法可以做这样的事情?

1 个答案:

答案 0 :(得分:2)

你想要的答案是:

 select q1.recordid, q2.item, `value`
  from (
    (select distinct recordid 
      from `record`) q1
    cross join
    (select distinct item
      from `schema`) q2
  ) left join `record` r
    on r.recordid = q1.recordid and r.item = q2.item
  order by q1.recordid, q2.item

但是由于内部查询中的交叉连接,它很快就会变成一个非常庞大的结果集。

Heres the demo