在 SQL 查詢中使用 DISTINCT 擷取所有欄位
SQL 中的 DISTINCT
關鍵字會根據指定列刪除重複行。 但是,取得 all 列,同時僅顯示列子集中的不同值,需要仔細考慮。 僅僅使用 SELECT DISTINCT *
並不能在所有資料庫系統中可靠地支援。
使用 DISTINCT 進行完整列檢索的解決方案
有多種方法可以實現此目的,具體取決於您的特定資料庫系統:
ROW_NUMBER()
視窗函數的解決方案:<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number FROM table ) AS rows WHERE row_number = 1;</code>
這會在每個分區內分配一個唯一的行號(由 field1
定義),按 field2
排序。 然後,外部查詢僅選擇每個分割區中的第一行。 將 field1
和 field2
替換為適當的欄位。
GROUP BY
子句可以工作,但前提是您可以保證所有其他欄位對於分組列的每個不同組合都具有相同的值。通常情況並非如此,並且可能會導致不可預測的結果。 <code class="language-sql">SELECT * FROM table GROUP BY field1;</code>
DISTINCT ON
子句,更直接的解決方案:<code class="language-sql">SELECT DISTINCT ON (field1) * FROM table;</code>
這只選擇 field1
的每個不同值的第一行。
<code class="language-sql">SELECT * FROM table AS t1 INNER JOIN table AS t2 ON t1.field1 = t2.field1 INNER JOIN (SELECT field1, MIN(field2) AS min_field2 FROM table GROUP BY field1) AS distinct_fields ON t1.field1 = distinct_fields.field1 AND t1.field2 = distinct_fields.min_field2;</code>
這會找到每個不同 field2
的 field1
最小值,並將其連接回原始表。 您可能需要根據您想要的行為調整 MIN()
函數。
請記得將 "table"
、"field1"
和 "field2"
替換為您實際的表格和欄位名稱。 最佳方法取決於您的特定資料庫系統以及當多行在指定列中具有相同的不同值時所需的行為。
以上是如何使用 DISTINCT 檢索 SQL 查詢中的所有欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!