簡體   English   中英

為連接表中不存在的記錄添加空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM