我有这张桌子:
cv2.CAP_PROP_*
我想要实现的是一个如下所示的结果集:
name code value
--------------------------
| john | 0001 | 1 |
| mary | 0001 | 2 |
| mary | 0002 | 3 |
换句话说,我希望结果包含 name code value
--------------------------
| john | 0001 | 1 |
| john | 0002 | NULL |
| mary | 0001 | 2 |
| mary | 0002 | 3 |
code
0002
的{{1}}行,表格中缺少该行。
我原本以为这会让我更接近:
john
但我得到的基本上是同一张桌子:
with x as (select distinct code from t)
select * from t left join x on x.code = t.code
一些额外的想法让我得出的结论是,我的解决方案无论如何都无法工作,因为 name code value value1
-------------------------- --------
| john | 0001 | 1 | 1 |
| mary | 0001 | 2 | 2 |
| mary | 0002 | 3 | 3 |
可能也会name
,我真的需要它出现。< / p>
我很难过,这看起来比实际上容易。
任何人都能解释一下吗?
答案 0 :(得分:3)
您还应该使用NAMES
派生表,因为在您的方法中,它应该与它的相反(无论是右连接还是用x替换t)都不会返回值的空值。 / p>
因此,您首先必须创建一个包含NAME|CODE
所有可能选项的派生表,然后将其连接到原始表。
SELECT t1.code,t2.name,t.value
FROM(SELECT DISTINCT code FROM t) t1
CROSS JOIN(SELECT DISTINCT name FROM t) t2
LEFT JOIN t
ON(t2.name = t.name and t1.code = t.code)