我有一個名爲「products」的表,其中包含以下數據。選擇查詢的反轉結果
--------------------
| id | tag_name |
--------------------
| 1 | electronics |
| 1 | tv |
| 1 | lcd |
| 2 | tv |
| 2 | lcd |
| 3 | tv |
| 3 | lcd |
--------------------
所有產品都有「電子」標籤是強制性的,但很少有產品缺少該標籤。根據我的問題上面的數據,我運行了哪些查詢,以便它返回ids 2 & 3,因爲它們沒有'電子'標籤。
2解決方案,腦海中出現
使用NOT IN -
select distinct id from products where id not in (select id from products where tag_name='electronics')
- 具有良好的幾百萬行,這是非常低效的第二種解決方案是湊齊了一個腳本,選擇所有不同的ID,然後檢查該ID是否存在「電子」標籤,如果不是,則插入該行。
是否還有另一種更有效的方式來處理? (可在同一個表使用JOIN
)
一種方法是刪除所有'ELECTRONICS'標籤,然後重新進行添加的所有ID – Dancrumb
@Dancrumb:或創造獨特的複合指數(無論如何應該有一個),並插入忽略:-) – zerkms