首頁 > 資料庫 > mysql教程 > 如何在SQL中選擇與同一列上的多個條件相符的記錄?

如何在SQL中選擇與同一列上的多個條件相符的記錄?

Barbara Streisand
發布: 2025-01-21 16:11:10
原創
944 人瀏覽過

How to Select Records Matching Multiple Criteria on the Same Column in SQL?

在SQL中選擇同一列上符合多個條件的記錄

SQL查詢有時需要檢索在同一列上符合多個條件的記錄。但是,簡單地使用多個具有相同列的WHERE子句並不總是能產生預期的結果。考慮以下範例:

我們有一個包含聯絡人和指示每個聯絡人狀態的標誌的資料庫表。表格包含以下數據:

ID contactid flag flag_type
118 99 Volunteer 1
119 99 Uploaded 2
120 100 Via Import 3
121 100 Volunteer 1
122 100 Uploaded 2

目標是僅傳回同時符合「Volunteer」和「Uploaded」標誌條件的聯絡人ID。使用以下查詢:

<code class="language-sql">SELECT contactid
WHERE flag = 'Volunteer'
AND flag = 'Uploaded'</code>
登入後複製

將不會傳回任何結果,因為每個條件只檢查一個特定的標誌值。要檢索所需數據,我們需要使用替代方法。

使用GROUP BY和HAVING

一種解決方案是使用GROUP BY和HAVING子句。以下查詢將依contactid分組結果並計算符合標誌值的個數:

<code class="language-sql">SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded')
GROUP BY contact_id
HAVING COUNT(*) = 2 -- 必须与WHERE flag IN (...)列表中的数字匹配</code>
登入後複製

同時具有「Volunteer」和「Uploaded」標誌的聯絡人將計數為2。然後,HAVING子句過濾結果,只包括這些聯絡人。

使用連線

另一種方法是使用連接。以下查詢將在your_table表上執行自連線:

<code class="language-sql">SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // 如果需要,可以添加更多连接
WHERE T1.flag = 'Volunteer'</code>
登入後複製

此查詢將建立一個臨時表,其中包含同時具有「Volunteer」和「Uploaded」標誌的所有聯絡人的組合。然後,WHERE子句過濾結果,只包括滿足這兩個條件的聯絡人。

方法選擇

選擇具有同一列上多個條件的記錄的最佳方法取決於資料的規模和結構。對於具有很長匹配條件清單的大型資料集,GROUP BY和HAVING解決方案可能更有效。對於具有較短匹配條件清單的小型資料集,JOIN解決方案可能更快。

以上是如何在SQL中選擇與同一列上的多個條件相符的記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板