我一直在使用左连接,并发现它非常有用。今天我遇到了右侧NULL没有显示的问题。第一个表是类别,如下所示:
id name
1 ROR
2 Mutation
3 Partition
第二个表是 scheme_category ,如下所示:
id scheme_id category_id period
1 12 1 3/2016
2 12 2 3/2016
3 12 1 4/2016
4 12 2 4/2016
5 12 3 4/2016
6 12 1 5/2016
7 12 3 5/2016
对于期间3/2016,category_id 3不存在任何值。同样,对于期间5/2016,category_id 2没有值。我使用category和scheme_category表编写了一个查询,以便 scheme_category 表显示为NULL:
select category.name, period
from category
left join scheme_category on category.id= scheme_category.category_id
但是此查询未将任何字段显示为NULL。请指导这方面。
答案 0 :(得分:1)
问题是您只加入类别ID且类别ID匹配。您需要有一个完整的类别ID列表 - 期间对,并加入此列表中的scheme_category表。
您可以创建一个单独的期间表,在其中列出期间,或者从scheme_category表本身获取期间列表。然后在句点列表和类别ID之间创建一个笛卡尔连接,并在scheme_category表上将此数据集连接起来。
由于第二个选项更复杂,我将提供一个示例代码:
select
from
(select distinct period from scheme_category) t1
join
category --note that there is no join condition -> creating a Cartesian join
left join
scheme_category on t1.period=scheme_category.period and category.id=scheme_category.category_id
答案 1 :(得分:-1)
我在PhpMyAdmin中创建了两个类似于你的表。 我的查询如下:
SELECT category.name, scheme_category.peroid
FROM `scheme_category`
LEFT JOIN category
ON category.id = scheme_category.category_id
......它给了我:
name | peroid
ROR | 3/2016
Mutation | 3/2016
ROR |4/2016
所以效果很好。