首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >where子句中的select条件

where子句中的select条件
EN

Stack Overflow用户
提问于 2017-03-13 20:54:19
回答 2查看 38关注 0票数 0

我有一个名为package的表:

代码语言:javascript
复制
id  name    validity
1   Free     NULL
2   Basic    90
4   Featured 80 
5   Premium  70

我还有另一张桌子广告

代码语言:javascript
复制
id  posted_on   title package_id 
1   2016-09-29  test   1
2   2015-09-29  test2  2
3   2016-07-29  test3  4

我有一个查询,比如:

代码语言:javascript
复制
SELECT * FROM ads AS ad WHERE (SELECT datediff(curdate(), posted_on) AS datecount) <= 180

我想从表package中获取此180

喜欢

代码语言:javascript
复制
if (package_id  == 2){
  instead of 180 it will be 90 fetched form package table    
} 

有没有办法通过单个SQL查询来实现这一点

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-13 21:57:54

查询的目的是使用包中的有效性值,如果是,那么连接将非常适合您……

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2017-03-13 20:57:21

首先:我不明白你的问题。为什么使用子查询,而不是直接这样做:

代码语言:javascript
复制
SELECT * 
FROM ads
WHERE datediff(curdate(), posted_on) <= 180

然后,将其更改为:

代码语言:javascript
复制
SELECT * 
FROM ads 
WHERE 
    datediff(curdate(), posted_on) <= case when package_id = 2 then 90 else 180 end

我删除了答案中的所有别名,因为它们无论如何都不会在您的查询中使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42764173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档