Mysql 在where子句中选择条件
我有一张名为Mysql 在where子句中选择条件,mysql,Mysql,我有一张名为package的表格: id name validity 1 Free NULL 2 Basic 90 4 Featured 80 5 Premium 70 我还有另外一张桌子 id posted_on title package_id 1 2016-09-29 test 1 2 2015-09-29 test2 2 3 2016-07-29 test3 4 我有一个类似这样的问题: SELECT * F
package
的表格:
id name validity
1 Free NULL
2 Basic 90
4 Featured 80
5 Premium 70
我还有另外一张桌子
id posted_on title package_id
1 2016-09-29 test 1
2 2015-09-29 test2 2
3 2016-07-29 test3 4
我有一个类似这样的问题:
SELECT * FROM ads AS ad WHERE (SELECT datediff(curdate(), posted_on) AS datecount) <= 180
有没有一种方法可以通过单个SQL查询来实现这一点?首先:我不理解您的查询。为什么使用子查询而不只是这样做:
SELECT *
FROM ads
WHERE datediff(curdate(), posted_on) <= 180
选择*
来自广告
其中datediff(curdate(),posted_on)是查询使用包中的有效值的目的,如果是这样,那么连接将非常适合您
select ads.*, package.name, package.validity
from ads
join package on ( package.id=ads.package_id
and ( datediff(curdate(),ads.posted_on)<=package.validity
or package.validity is null))
选择ads.*、package.name、package.validity
来自广告
在(package.id=ads.package\u id)上加入包
和(datediff(curdate(),ads.posted_on)你可以使用CASE..然后从句很奇怪。你为什么给表一个别名?你为什么使用子查询?然后:为什么给子查询一个别名?你在查询中没有使用任何别名。事实上,我从一个长查询中修改了查询,但忘了删除别名。我的不好。好吧,很好,这很好。不过,你也可以这样做吗建议查询空值?我不希望在包表中有包\u id=1的where条件什么应该为空?当id=1有效性为空时,只需删除包\u id=1的where条件
SELECT *
FROM ads
WHERE
datediff(curdate(), posted_on) <= case when package_id = 2 then 90 else 180 end
select ads.*, package.name, package.validity
from ads
join package on ( package.id=ads.package_id
and ( datediff(curdate(),ads.posted_on)<=package.validity
or package.validity is null))