Php

強制條目數

  • March 5, 2014

我的標題可能不是最好的,但基本上我有一個儲存主機、漏洞發現參考和狀態的表。我正在嘗試查詢這些,但是在沒有條目的情況下,我想強制它向我顯示狀態的預設值。這是一個例子……

SELECT f.host_id, f.`status` FROM findings f WHERE f.finding_id = 1 AND f.host_id IN (1,2,3)

因此,如果有 1 和 2 的條目,但沒有 3,我將需要 3 的條目,但預設狀態值為“無數據”。

射線

編輯:

我試圖避免進行 3 次查詢,因為我可能在該列表中有幾十個主機,這將是一個主要的性能損失!

您可以使用包含這 3 個值的(派生)表來執行此操作,然後將LEFT其連接到findings

SELECT
   d.host_id, 
   CASE WHEN f.host_id IS NOT NULL THEN f.status ELSE 'No Data' END AS status 
FROM 
   ( SELECT 1 AS host_id UNION ALL
     SELECT 2 UNION ALL
     SELECT 3
   ) AS d
 LEFT JOIN 
   findings AS f 
     ON  f.finding_id = 1 
     AND f.host_id = d.host_id ; 

如果該findings.status列不可為空,則可以將 替換CASE ... END為更簡單的:

   COALESCE(f.status, 'No data') AS status

如果你有一張hosts表(和大量的ID要檢查),派生表也可以簡化:

...
FROM 
   ( SELECT host_id 
     FROM hosts
     WHERE host_id IN (1,2,3)
   ) AS d
 LEFT JOIN 
...

引用自:https://dba.stackexchange.com/questions/60206