Mysql leftjoin 问题与 NULL

Mysql leftjoin issue with NULL

我一直在使用左连接,发现它非常有用。今天我遇到了一个问题,右侧 NULL 没有显示。首先table是类别,如下:

id    name
1     ROR
2    Mutation
3    Partition

第二个table是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. 我使用类别和 scheme_category table 以便 scheme_category table 中不存在的类别显示为 NULL:

select category.name, period 
from category 
    left join scheme_category on category.id= scheme_category.category_id 

但此查询未将任何字段显示为 NULL。请指导。

问题是您仅根据类别 ID 加入并且类别 ID 匹配。您需要有一个完整的类别 ID - 周期对列表,并加入此列表中的 scheme_category table。

您可以创建一个单独的时间段 table,在其中列出时间段,或者您可以从 scheme_category table 本身获取时间段列表。然后在周期列表和类别 ID 之间创建笛卡尔连接,并在 scheme_category table.

上左连接此数据集

由于第二个选项比较复杂,我将提供一个示例代码:

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    

我在 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

效果不错。