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中文網其他相關文章!