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
效果不错。
我一直在使用左连接,发现它非常有用。今天我遇到了一个问题,右侧 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
效果不错。