首頁 > 資料庫 > mysql教程 > 為什麼我的 MySQL `NOT IN` 多列子查詢傳回「運算元應該包含 1 列」?

為什麼我的 MySQL `NOT IN` 多列子查詢傳回「運算元應該包含 1 列」?

Susan Sarandon
發布: 2025-01-12 09:48:43
原創
820 人瀏覽過

Why Does My MySQL `NOT IN` Subquery with Multiple Columns Return

MySQL NOT IN 子查詢多列所導致的「運算元應包含 1 列」錯誤

在使用包含多列的子查詢的 NOT IN 子句時遇到「運算元應包含 1 列」錯誤是很常見的。此錯誤源自於 NOT IN 子句期望子查詢只傳回單列的限制。

在提供的查詢中:

<code class="language-sql">SELECT * from campaigns WHERE id not in
(
    SELECT 
        e.id_campaign, d.name, d.frequency, d.country, d.referral, d.bid, d.status, COUNT(e.id) AS countcap  
    FROM campaigns d
    LEFT JOIN served e
    ON d.id = e.id_campaign 
    WHERE 
        d.status = 'Active'
    GROUP BY e.id_campaign
    HAVING
        countcap < d.frequency
)</code>
登入後複製

子查詢回傳八列 (id_campaign, name, frequency, country, referral, bid, status, 和 countcap)。然而,NOT IN 子句需要單列進行比較。

解:

為了解決此錯誤,我們需要修改子查詢使其只傳回 id_campaign 列,這是我們在主查詢中要檢查非成員關係的列:

<code class="language-sql">SELECT *
FROM campaigns 
WHERE id NOT IN (
    SELECT id_campaign
    FROM (
        SELECT e.id_campaign AS id_campaign, d.frequency, e.id
        FROM campaigns d
        LEFT JOIN served e ON d.id = e.id_campaign
        WHERE d.status = 'Active'
        GROUP BY e.id_campaign
        HAVING COUNT(e.id) < d.frequency
    ) AS subquery
);</code>
登入後複製

透過將子查詢結果限制為單列 id_campaign,我們消除了「操作數應包含 1 列」錯誤,並確保 NOT IN 子句能夠正確地執行比較操作。 注意,我們新增了一個別名 subquery 來更清晰地組織查詢。 這個修改後的查詢將只會傳回 campaigns 表中 id 不在子查詢結果中的行。

以上是為什麼我的 MySQL `NOT IN` 多列子查詢傳回「運算元應該包含 1 列」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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