SQL查詢中處理缺失IN值的預設結果
在SQL中,IN查詢用於根據一組值過濾行。然而,當用於動態查詢時,可能需要處理IN清單中某些值在資料庫中可能沒有對應記錄的情況。這會導致這些值的空白行,進而影響後續的處理或資料顯示。
為了解決這個問題,可以考慮使用LEFT JOIN重寫查詢。透過將條件從WHERE子句移至LEFT JOIN的ON子句(如提供的範例程式碼所示),可以確保IN清單中的所有值都包含在結果集中。這是因為LEFT JOIN傳回左表中的所有行,即使右表中沒有符合的行。
範例:
考慮以下簡化的查詢:
<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
在這個查詢中,條件OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date
被省略了,為了完整性,我們應該把它包含在JOIN條件中。
改進後的查詢如下:
<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
現在,對於IN清單中在OnlineUseage
表中沒有對應記錄的任何值,LEFT JOIN將為對應列傳回NULL值。然後可以使用IFNULL函數將NULL值替換為預設值(在本例中為0)。
此方法可確保IN清單中的所有值都包含在結果集中,並為不符合指定條件的值指派適當的預設值。 請注意,CURRENT_TIMESTAMP
用於取代原文中不明確的<p>Now
,確保查詢的正確執行。
以上是如何傳回 SQL 查詢中缺少 IN 值的預設結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!