2013-07-18 58 views
0

我嘗試計算所有丟失的翻譯數量,並在如何做到這一點時真的迷失了方向。mysql select不存在的總數

表:

  • 語言(LANGUAGE_ID,名)
  • 產品(產品)
  • product_translations(產品,LANGUAGE_ID,名)

管理都變得非常懶惰,我希望能夠向他們顯示缺少多少翻譯的計數。

我想一個非常簡單的做法是隻獲得總數(languages-> count * products-> count),但我想單獨返回每個產品的計數。

回答

1

要做這樣的查詢,請從具有所有組合的driver表(子查詢)開始。然後移除已翻譯的那些:

select driver.* 
from (select distinct l.language_id, p.product_id 
     from languages l cross join 
      products p 
    ) driver left outer join 
    translations t 
    on t.language_id = driver.language_id and 
     t.product_id = driver.product_id 
where t.language_id is null; 

這將使用left outer join,這使在driver表的一切。如果沒有匹配,那麼translations中的列將是NULL - where子句只保留這些。

如果每個表中的值都是唯一的,則子查詢中可能不需要distinct

作爲說明:以上是我最喜歡的編寫查詢的方式,因爲我認爲它是最明確的意圖。但是,MySQL實際上實現了子查詢。因此,如果列在兩個參考表中是唯一的,那麼以下更有效:

select l.*, p.* 
from languages l cross join 
    products p left outer join 
    translations t 
    on t.language_id = l.language_id and 
     t.product_id = p.product_id 
where t.language_id is null;