首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将select语句中的子查询重构为联接

将select语句中的子查询重构为联接
EN

Stack Overflow用户
提问于 2016-04-08 02:33:24
回答 2查看 1.2K关注 0票数 2

我有一个产品表和一个小部件表。

产品是由多个小部件构建的,我有一个链接表,它显示了哪些小部件被链接到哪个产品。

可以将小部件标记为expired,这意味着它们没有资格被添加到任何新产品中。

模式和示例数据在以下sqlFiddle中-

我需要一个查询,根据以下规则显示特定产品的所有合格小部件:

  1. 如果小部件标记为过期,则不应显示它。
  2. 作为上述规则的例外--如果小部件标记为过期,但已经链接到产品,则应该显示它。
  3. 如果小部件已经链接到产品,则应将其标记为'selected'

我得到了以下可以工作的查询,并满足上述所有规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
    data.WidgetName, 
    data.expired,
    case 
        when data.ID in (select data_id from Widget_link where productId = 1)   
        then 1 
        else 0 
    end as selected
from Widget_data data
left outer join Widget_link link
    on data.ID = link.data_id and data.expired = 1
where (data.expired = 0 or (data.expired = 1 and link.productId = 1))

我想找到一种将查询的select部分中的子查询重构为某种联接的方法。我正在尝试创建一个视图,我可以使用where子句进行筛选,而不是在两个地方使用productId。这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 02:47:29

简化后,您的查询完全可以基于下面的联接进行评估,并且根本不需要内部查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select data.WidgetName,
     case when link.id is not null then 1 else 0 end as selected
from Widget_data data
left outer join Widget_link link
    on data.ID = link.data_id and link.productId = 1
where data.expired=0 or link.id is not null

演示SQL小提琴

票数 4
EN

Stack Overflow用户

发布于 2016-04-08 02:48:15

可以使用通用表表达式覆盖选择列表的结果,并在单个SQL语句中使用。

您甚至可以在代码中创建具有多个CTE的SQL语句

我的建议可以从视觉上概括如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH cte AS (
  SELECT ..... FROM .....
),
other_cte AS (
  SELECT ..... FROM .....
)
SELECT * 
FROM cte
INNER JOIN other_cte ON...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36497410

复制
相关文章
js实现HTML页面时钟动态显示
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body οnlοad="startTime()"> <script> // var date = new Date(); // date.setFullYear(2010,1,11) // document.write(date) //时钟 function startTime() {
开心分享
2020/08/05
7.7K0
js实现HTML页面时钟动态显示
var mytime =setInterval(function () {getTime();},1000);function getTime() {var d =new Date();var t =d.toLocaleTimeString();document.getElementById("ptime").innerHTML =t;}
开心分享
2021/04/07
5.4K0
js jquery 实现html页面之间参数传递(单一参数、对象参数传递)
最近自己在忙着做毕业设计,后台程序员,前端菜鸡,因为需要,所以实现了html页面之间参数传递。------jstarseven 、菜鸡的自我修养.
大道七哥
2019/09/10
7.2K0
HTML5-JS操作页面滚动条(禁止、隐藏、显示、不显示)
不显示滚动条(css) ::-webkit-scrollbar { width: 0px; } 禁止页面滚动条(js) document.body.parentNode.style.overflowY = "hidden"; $("body").parent().css("overflow-y","hidden"); 启用浏览器滚动条(js) document.body.parentNode.style.overflowY = "auto"; $("body").parent().css("overflo
手撕代码八百里
2020/07/28
11K0
js传递数组到后台
方法一:  1.使用JSON.stringify 将数组对象转化成json字符串;
超级小可爱
2023/02/20
3.9K0
如何在html页面显示html标签源码
这是一篇不正经实现方案报道。 1 引言 先来看个问答: stackoverflow: Why was the xmp HTML tag deprecated? [duplicate] 这个问题感觉
celineWong7
2020/11/05
11.5K0
html页面显示乱码原因 原
<div class="col-md-3">        <div id="treeview4" class=""></div> </div>
tianyawhl
2019/04/04
7.1K0
如何将高德地图JS API嵌入到HTML网页内
先去https://lbs.amap.com/注册一下,直接用淘宝/QQ等OpenID既可实现注册。 没有要求实名制,填写姓名的时候,填写英文名。
繁华是客
2023/03/03
5K0
js跳转页面并刷新(本页面跳转)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128190.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/27
23.1K0
thymeleaf 传递数据到js变量
thymeleaf 传递数据到js变量 如何把控制器传来的model中的值传递给js变量呢? 需要以下两个: <script th:inline="javascript"> var message =
Dream城堡
2018/09/10
5.2K0
html页面显示服务器时间
lblTimer = $("#lbltimer"); d = new Date('<%=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")%>'); lblTimer.children("span").text(getStr(d)) setInterval("setTimer()", 1000);
冰封一夏
2019/09/11
3.1K0
[开发技巧]·html实现返回页面并自动刷新
在进行APP开发或作制作网站时,有时候会遇到你下一级页面操作过以后会改变上一级页面的结果。这时候就需要我们去刷新上一级页面。 一般可以采取三种方式:
小宋是呢
2019/06/27
6.1K0
用js实现html页面水印
要在 HTML 页面中添加水印并防止截图,可以使用 JavaScript。以下是实现的基本步骤:
用户8703799
2023/04/10
4.4K0
html中嵌入iframe进行父子页面参数传递[通俗易懂]
1.父页面调用子页面函数,选择iframe的id + contentWindow +子页面的函数名([参数列表])
全栈程序员站长
2022/09/14
3.4K0
如何将 JavaScript 文件引入到 HTML
JavaScript,也缩写为 JS,是一种用于 Web 开发的编程语言。作为与 HTML 和 CSS 一起使用的 Web 核心技术之一,JavaScript 用于使网页具有交互性并构建 Web 应用程序。遵循通用显示标准的现代 Web 浏览器通过内置引擎支持 JavaScript,无需额外的插件。
梦溪
2021/09/08
12.3K1
点击加载更多

相似问题

如何在电报机器人中创建复选框列表?

220

如何在电报机器人中创建表单

23

如何在电报机器人中创建命令“Select a group”?

115

如何在Python电报机器人中使用ChosenInlineResultHandler

10

如何在电报机器人中显示选项?

210
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文