過濾掉 MySQL SELECT 查詢中的 NULL
問題:如何使用 MySQL SELECT 語句只擷取非空值?
標準 MySQL SELECT *
語句包含所有欄位,甚至包含具有 NULL
值的欄位。 若要僅擷取非空數據,請使用 IS NOT NULL
條件:
<code class="language-sql">SELECT * FROM your_table WHERE YourColumn IS NOT NULL;</code>
此查詢傳回 YourColumn
不包含 NULL
的行。 MySQL 也支援空安全相等運算子的否定,儘管這不是標準 SQL:
<code class="language-sql">SELECT * FROM your_table WHERE NOT (YourColumn <=> NULL);</code>
處理多個欄位需要不同的策略。一種方法使用多個 SELECT
語句和 UNION ALL
:
<code class="language-sql">SELECT val1 AS val FROM your_table WHERE val1 IS NOT NULL UNION ALL SELECT val2 FROM your_table WHERE val2 IS NOT NULL;</code>
這種方法單獨檢查每一列並組合結果。 然而,由於多次表掃描,它可能效率低下。
為了避免多次掃描,請考慮使用帶有交叉連接的 CASE
語句:
<code class="language-sql">SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS val FROM your_table CROSS JOIN (SELECT 1 AS idx UNION ALL SELECT 2) t HAVING val IS NOT NULL;</code>
這將從每行的 val1
和 val2
中選擇第一個非空值,並將其指派給 val
欄位。
以上是如何從 MySQL SELECT 語句中排除 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!