首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL选择子查询

SQL选择子查询
EN

Stack Overflow用户
提问于 2009-09-16 01:00:45
回答 3查看 565关注 0票数 2

我是SQL的新手,遇到了以下问题。

我有一个表,上面有公司的详细信息,它是通过enqID连接到联系人表的。

在contact表中,有4种不同类型的联系人,它们可能有条目,也可能没有条目。它们由ctcTypID (1 - 4)区分

我想要生成一个查询,其中包含所有公司记录,以及4种不同类型联系人中每种类型的联系人姓名,所有这些都在一行上。

我想我可以通过对每个不同的联系人使用子查询来做到这一点,但我似乎不能让它工作,因为我不知道如何写一个引用其父select子句的子查询select子句(如果您明白我的意思!)

这有可能吗?正如我已经提到的,我是SQL的新手,所以请尽量不要嘲笑太多!

谢谢,

史蒂夫

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-16 01:08:26

例如(假设您使用的是SQL Server 2005及更高版本-不幸的是,您在最初的帖子中没有提到这一点):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
   c.CompanyName,
   c1.ctcTypID, c1.ContactName,
   c2.ctcTypID, c2.ContactName,
   c3.ctcTypID, c3.ContactName,
   c4.ctcTypID, c4.ContactName
FROM
   CompanyTable c
LEFT OUTER JOIN
   ContactTable c1 ON c.enqID = c1.enqID AND c1.ctcTypID = 1
LEFT OUTER JOIN
   ContactTable c2 ON c.enqID = c2.enqID AND c2.ctcTypID = 2
LEFT OUTER JOIN
   ContactTable c3 ON c.enqID = c3.enqID AND c3.ctcTypID = 3
LEFT OUTER JOIN
   ContactTable c4 ON c.enqID = c4.enqID AND c4.ctcTypID = 4

您需要使用左外部连接,因为可能不存在匹配,通过这样做,您的查询在性能方面不会太快-但它应该可以工作。

Marc

票数 2
EN

Stack Overflow用户

发布于 2009-12-09 06:15:15

这也应该是可行的。避免在contact表上多次联接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
   CompanyTable.CompanyName,
   MAX(CASE WHEN ContactTable.ctcTypID  = 1 THEN ContactTable.ContactName END) AS ContactName1,
   MAX(CASE WHEN ContactTable.ctcTypID  = 2 THEN ContactTable.ContactName END) AS ContactName2,
   MAX(CASE WHEN ContactTable.ctcTypID  = 3 THEN ContactTable.ContactName END) AS ContactName3,
   MAX(CASE WHEN ContactTable.ctcTypID  = 4 THEN ContactTable.ContactName END) AS ContactName4
FROM CompanyTable,
LEFT JOIN ContactTable 
    ON ContactTable.enqID = CompanyTable.enqID AND ContactTable.ctcTypID  IN (1,2,3,4)
GROUP BY
   CompanyTable.CompanyName
票数 0
EN

Stack Overflow用户

发布于 2009-09-16 01:06:36

我认为您正在尝试将SQL用于一些不是为它而设计的东西。SQL是一种允许您操作和检索数据的语言,您还试图使用SQL来格式化检索到的数据的输出,我认为您不应该这样做:

您不应尝试格式化(将所有联系人放在一行f.i.)用SQL查询数据。我的建议是:只需使用性能最好的SQL-query从数据库中检索数据,并使用另一种语言(C#、Delphi、PHP,无论您的应用程序使用哪种语言)格式化输出(将联系人放在同一行上)。

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

https://stackoverflow.com/questions/1431809

复制
相关文章
sql 子查询(mysql)
子查询 可以分为: 单行单列(就是一个值) 单行多列(就是有一行,这一行有很多不同列数据) 多行单列(同一列不同的数据) 多行多列(可以说就是一张表了吧)
1_bit
2020/10/23
3K0
SQL like子查询
现在从job_provinces中查找与provinces对应编号为1的省份的的code值
全栈程序员站长
2022/09/14
1.6K0
SQL 基础--> 子查询
ORA-01427: single-row subquery returns more than one row
Leshami
2018/08/07
1.9K0
sql的嵌套查询_sql子查询嵌套优化
最近在做各类小应用,用到了MYSQL,有时候会用到一些比较复杂的嵌套查询,在研究怎么通过SQL实现这些。 假设下面这张表(stu)描述学生的基本信息:
全栈程序员站长
2022/09/22
5.3K0
sql连接查询和嵌套查询_sql子查询和连接查询
【例二】:查询 JAVA第一学年 课程成绩排名前十的学生 并且分数要大于80 的学生信息(学号、姓名、课程名称、分数)
全栈程序员站长
2022/09/22
4.5K0
sql连接查询和嵌套查询_sql子查询和连接查询
sql嵌套查询和连接查询_sql子查询嵌套规则
WHERE department_id=( SELECT department_id
全栈程序员站长
2022/11/07
4K0
sql的子连接查询
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
3.3K0
SQL 子查询 EXISTS 和 NOT EXISTS[通俗易懂]
该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。
全栈程序员站长
2022/11/17
4.7K0
数据库sql嵌套查询题_sql子查询嵌套优化
例如:子查询是查询学生表中姓名为张三的学生所在的系,父查询是查询该系所有学生的姓名和学号。张三只能在一个系,所以子查询的结果是单个值,可以使用比较运算符连接。
全栈程序员站长
2022/09/22
2.7K0
数据库sql嵌套查询题_sql子查询嵌套优化
SQL学习之学会使用子查询
1、SELECT语句是SQL的查询。我之前的随笔中所用的SELECT语句都是简单的查询,即从单个数据库表中检索数据的单条SELECT语句。 查询:任何SQL语句都是查询,但此术语一般指SELECT语句。 2、SQL不仅允许简单的SELECT查询,还允许创建子查询,即嵌套在其他查询中的查询。 下面通过实例来了解子查询在实际项目中的应用: create database Study go use Study go create table Customers( Id int identity(1,1), Nam
郑小超.
2018/01/24
1.6K0
SQL学习之学会使用子查询
【T-SQL基础】03.子查询
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化。 本系列【T-SQL基础】主要是针对T-SQL基础的总结。 练习题: 1.写一条查询语句,返回Orders表中
悟空聊架构
2018/05/18
1.9K0
Mysql常用sql语句(19)- in / exists 子查询
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
1K0
Mysql常用sql语句(19)- in / exists 子查询
SQL 子查询怎么优化?写的很深!
子查询 (Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化 (Decoorelation 或 Unnesting),将其改写为类似于 Semi-Join 这样的更高效的算子。
芋道源码
2021/04/20
3.7K0
将SQL优化做到极致 - 子查询优化
编辑手记:子查询是SQL中比较重要的一种语法,恰当地应用会很大程度上提高SQL的性能,若用的不得当,也可能会带来很多问题。因此子查询也是SQL比较难优化的部分。今天一起来学习最常见的几种优化子查询到方
数据和云
2018/03/07
4.5K0
将SQL优化做到极致 - 子查询优化
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!
_DIY
2020/05/29
5.1K0
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
SQL审核:OR展开与子查询优化案例详解
黄廷忠(网名:认真就输) 云和恩墨技术专家 个人博客:http://www.htz.pw/ 本篇整理内容是黄廷忠在“云和恩墨大讲堂”微信分享中的讲解案例,SQL 优化及 SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是 DBA,都应当持续深入的学习 SQL 开发技能,从而为解决性能问题打下根基。 第一篇为:性能为王:SQL标量子查询的优化案例分析 本篇为系列案例之二:OR展开与子查询优化案例详解。 本案例 SQL 是15年给一个省电信系统做优化时遇到的。 SQL性能问题诊断 下面来看
数据和云
2018/03/05
1.2K0
SQL审核:OR展开与子查询优化案例详解
子查询与子查询的分类(一)
在 SQL 中,子查询是一个查询嵌套在另一个查询中的查询,也被称为内部查询。子查询可以用来创建更复杂的查询,从而实现更高级的数据检索和分析。
堕落飞鸟
2023/05/10
1.8K0
子查询与子查询的分类(二)
子查询可以嵌套在 SELECT、FROM、WHERE 和 HAVING 子句中,以实现更复杂的数据检索和分析。在使用子查询时,需要注意以下几点:
堕落飞鸟
2023/05/10
1.5K0
SQL Server基础SQL脚本之内外连接、交叉连接;函数、子查询
代码大概200行左右 本系列,几乎都是代码,记得当时写的时候用的是微软的官方实例数据库AdventureWorks_Data.mdf、AdventureWorks_Log.ldf来运行的。 下载链接:链接: https://pan.baidu.com/s/1pMdLz6N 密码: xvhu 或者回复“AdventureWorks”来获取链接。 ---- use AdventureWorks --切换到AdventureWorks数据库 --创建Student表和Marks表,用于操作各种联接 cr
赵腰静
2018/03/09
2.3K0
Mysql常用sql语句(20)- 子查询重点知识
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
4980

相似问题

选择SQL查询子查询

20

SQL子选择查询

23

SQL选择子查询

23

SQL选择帮助-子查询

51

SQL高级子选择查询

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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