我有這樣的查詢 SQL查詢不選擇屬性
SELECT *
FROM `GSheets`
WHERE `sheetcat` = 'Unsubscribed'
AND `sheetcat` IS NOT NULL
AND `user` LIKE '%,r00t,%'
OR `user` LIKE 'r00t,%'
OR '%,r00t'
OR `user` = 'r00t'
我指定sheetcat要退訂,但查詢響應是NULL(或空)? 爲什麼?
我有這樣的查詢 SQL查詢不選擇屬性
SELECT *
FROM `GSheets`
WHERE `sheetcat` = 'Unsubscribed'
AND `sheetcat` IS NOT NULL
AND `user` LIKE '%,r00t,%'
OR `user` LIKE 'r00t,%'
OR '%,r00t'
OR `user` = 'r00t'
我指定sheetcat要退訂,但查詢響應是NULL(或空)? 爲什麼?
當您以分隔字符串存儲事物列表時,這是一個問題。糟糕,糟糕,糟糕的數據設計。第一個和主要的建議是創建一個新的表格,每張表格一行,每個用戶一行。
現在,我們有時會被其他人的糟糕,糟糕,糟糕的設計決定所困擾。 MySQL提供find_in_set()
這你想要做什麼:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' AND
FIND_IN_SET('r00t', `user`) > 0;
注意sheetcat IS NOT NULL
是多餘的。一個NULL
值會失敗的第一個條件。除非你可能打算:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' OR
(sheetcat IS NOT NULL AND FIND_IN_SET('r00t', `user`) > 0);
但這不會是我第一次猜測你的意圖。
如果您在OR
條件附近放置了括號,則您的查詢也可以正常工作。但即使這太複雜了。使用LIKE
一個簡單的版本是:
WHERE `sheetcat` = 'Unsubscribed' AND
CONCAT(',', `user`, ',') LIKE '%,r00t,%'
謝謝,真的很好的解釋! –
AND
takes precedence over OR
。你需要將你的信息OR
條件:
SELECT *
FROM `GSheets`
WHERE `sheetcat` = 'Unsubscribed'
AND
( `user` LIKE '%,r00t,%'
OR `user` LIKE 'r00t,%'
OR `user` LIKE '%,r00t'
OR `user` = 'r00t'
)
第二sheetcat
條件也是多餘的,可以刪除NULL
檢查。
感謝您提供快速和非混亂的答案;) –
你可能想在WHERE子句中的一些括號...(提示:用戶喜歡...) – jarlh
感謝誰解決我的帖子版主,和其他所有幫助我諷刺地發佈更好的內容。 –