[英]Adding null values for records not existing in joined table
我有一個名為top_trends
的表,它具有以下架構:
id int(11) AI PK
criteria_id int(11)
value varchar(255)
created_at timestamp
updated_at timestamp
然后我有另一個表,稱為search_criterias
,它具有以下架構:
id int(11) AI PK
title varchar(255)
created_at timestamp
updated_at timestamp
這是一個查詢,它根據一個值提供基於最大記錄數的值。 因此,如果在top_trends
有 2 條記錄, top_trends
criteria_id
為 1,並且在top_trends.value
列中的值都為 3,然后有一個單獨的 SINGLE 記錄,具有相同的criteria_id 1 但值為 2,則查詢將產生一個結果所選條件(為 1)的值為 3,因為值 3 比任何其他具有criteria_id 1 的值行出現的次數更多。因此,簡單來說,查詢為條件 id 1 選擇了值 3,因為這發生了基於具有criteria_id
1的top_trends中的記錄的最多次數
select
x.value as `values`
, sc.id as id
, sc.title
, sc.created_at
, sc.updated_at
, x.criteria_id as search_category_id
from
(
select
criteria_id
, `value`
from
top_trends
group by
`criteria_id`
order by
`value`
) x
left join search_criterias sc
on sc.id = x.criteria_id
group by
criteria_id
我的問題是,不幸的是,現在我們沒有所有可能的search_criterias
的數據,所以search_criteria
表中的一些記錄沒有在我的查詢中聚合。
例如,我們有一個城市的 search_criteria 記錄,id 為 5,但 top_trends 表中沒有criteria_id 為 5 的記錄......所以上面的查詢不包括該 search_criteria。
我想做的是將那些不在top_trends
表中但values
屬性為null
記錄包含在search_criteria
表中
當左表中的行在右表中沒有匹配項時,將使用LEFT JOIN
。 由於您的案例中缺少的行在top_trends
,因此應該是LEFT JOIN
的右表。 所以切換join的順序。
select
x.value as `values`
, sc.id as id
, sc.title
, sc.created_at
, sc.updated_at
, x.criteria_id as search_category_id
from search_criterias sc
left join
(
select
criteria_id
, `value`
from
top_trends
group by
`criteria_id`
order by
`value`
) x
on sc.id = x.criteria_id
group bysc.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.