我正在尝试使用IFNULL来确定在where子句中使用列,但我不相信我正确地做了。有人有什么建议吗?
SELECT * FROM bdesclookuptable
WHERE LOWER('Santa Clause Home Address') LIKE CONCAT('%',LOWER(lText),'%')
AND LOWER('Santa Clause Home Address') LIKE CONCAT('%',LOWER(IFNULL(plusand,'ilikethispaintingoverhead')),'%')
AND LOWER('Santa Clause Home Address') NOT LIKE CONCAT('%',LOWER(IFNULL(andnot,'ilikethispaintingoverhead')),'%');
table
id lText bbid ttype andnot plusand
16 Home Address 11 13 null Santa
17 Home Address 11 13 Work Santa
18 Home Address 12 15 Mrs Clause null
我希望此查询仅提取ID为16的记录。
答案 0 :(得分:1)
你有3个条件。为了成功,他们都必须得到满足。
条件1符合所有三条记录,因为Home Address
中包含Santa Clause Home Address
。
条件2满足16和17. 18失败,因为plusand
被替换为模式中未包含的长词。
条件3再次满足所有三个条件。
所以你应该得到16和17。
为了避免17,你应该使其中一个条件失败,例如: G。字符串中包含andnot
值以使其失败。