您好我正在尝试使用if子句编写查询 请建议我怎么做我的情况如下
IF(`page_type` ==1,
`pages NOT LIKE '%ads/indian-institute-of-technology-bombay.html%'
OR pages NOT LIKE '%ads/*%' OR pages NOT LIKE '%indian-institute-of-technology-bombay.html/*%'` ,
` pages LIKE '%ads/indian-institute-of-technology-bombay.html%'
OR pages LIKE '%ads/*%' OR
pages LIKE '%indian-institute-of-technology-bombay.html/*%'` )
完整查询
SELECT *
FROM `app_slides`
WHERE IF(`page_type` ==1, `pages NOT LIKE '%ads/indian-institute-of-technology-bombay.html%'
OR pages NOT LIKE '%ads/*%'
OR pages NOT LIKE '%indian-institute-of-technology-bombay.html/*%'` ,
` pages LIKE '%ads/indian-institute-of-technology-bombay.html%'
OR pages LIKE '%ads/*%'
OR pages LIKE '%indian-institute-of-technology-bombay.html/*%'`
)
答案 0 :(得分:0)
IF
的工作原理如下:
IF(<condition>, <value if true>, <value if false>)
以此为例
SELECT IF( 'a' = 'a', 1, 0 ); //will return 1
SELECT IF( 'a' = 'b', 1, 0 );//will return 0
在IF
查询中使用WHERE
以下示例显示了如何使用IF in a WHERE
查询。
SELECT ...
WHERE ...
AND IF(myfield = 'somevalue', 1, 0) = 1
答案 1 :(得分:0)
这不应该在if中完成,而应该使用逻辑运算符表示。
select ... from ... where (`page_type` == 1 and ... )
or (`page_type` <>1 and ...)
您可以通过重写为联合而不是使用或在where标准中来优化它。
答案 2 :(得分:0)
您可以使用案例。案例陈述就是这样的。
SELECT empno, ename, job
FROM scott.emp
WHERE (CASE WHEN job = 'MANAGER' THEN '1'
WHEN job = 'CLERK' THEN '2'
ELSE '0' END) IN (1, 2)
答案 3 :(得分:0)
你有一两个错误,其他答案没有解决......
x NOT LIKE 'a'
OR x NOT LIKE 'b'
始终为TRUE。因此,IF
的第一部分将永远成功。也许你想要
NOT ( x LIKE 'a'
OR x LIKE 'b' )
具体地,
NOT ( `pages LIKE '%ads/indian-institute-of-technology-bombay.html%'
OR pages LIKE '%ads/*%'
OR pages LIKE '%indian-institute-of-technology-bombay.html/*%'` )
另一个可能的错误:
ads/*
这实际上是你期待的吗?请注意*
在LIKE
中使用时与RLIKE
中使用的IF
不同。
使用CASE
,page_type == 1 and (...)
还是LIKE '%...'
并不重要 - 每个都会大致相同。并且每个人都会得到所需的结果(在修复我指出的错误之后)。每个都会很慢 - 也就是说,每个人都会进行全表扫描。这有两个原因:
OR
)效果不佳。UNION
效果不佳。 (只有当你摆脱所有ORs
和前导通配符时,更改为{{1}}才有用。