我有这样的查询 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
感谢谁解决我的帖子版主,和其他所有帮助我讽刺地发布更好的内容。 –