Questions tagged «subquery»

SQL术语,用于描述何时将SELECT语句用作较大SQL语句的一部分。较大的语句可能是DML,并且总是在方括号或括号中找到。

3
为什么此查询有效?
我有两个表,table_a(标识,名称)和table_b(标识),在Oracle 12c中说。 为什么此查询不返回异常? select * from table_a where name in (select name from table_b); 据我了解,Oracle认为这是 select * from table_a where name = name; 但是我不明白为什么呢?

7
从选择子查询中获取多个列
SELECT *, p.name AS name, p.image, p.price, ( SELECT ps.price FROM product_special ps WHERE p.id = ps.id AND ps.date < NOW() ORDER BY ps.priority ASC, LIMIT 1 ) AS special_price, ( SELECT ps.date FROM product_special ps WHERE p.id = ps.id AND ps.date < NOW() ORDER BY ps.priority ASC, LIMIT 1 …
24 subquery 

2
子查询的别名与主查询的别名相同
我有一个别名与其子查询别名相同的SQL查询。 例如: select * from ROOM r where ... ( select * from ROAD r where ... ) 这很好用,因为子查询的别名似乎隐藏了主查询的别名。 在所有情况下都可以那样工作吗? 我会得到不确定的结果吗? 如果可以的话,如何引用主查询r呢?

2
通过子查询选择多列
我正在尝试从以下查询中的子查询中选择2列,但无法这样做。尝试创建别名表,但仍然无法获取它们。 SELECT DISTINCT petid, userid, (SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate, (SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID FROM pet LEFT JOIN comments ON pet.id = comments.petid WHERE userid='ABC' AND deviceID!='ABC' AND comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH); 基本上,我试图从同一行中获取lastComDate&lastPosterID,该行是针对特定宠物的注释中的最新行。请提出如何有效地获取它们的建议。 上面的查询有效,但由于两次获取同一行而显得有些矫kill过正。而且,该ORDER BY子句比聚合函数要慢得多-正如我在分析查询时发现的那样。因此,避免排序的解决方案将不胜感激。

1
使用子查询时,Postgres错误[列必须出现在GROUP BY子句中或在聚合函数中使用]
我有两个桌子employee和phones。员工可以使用0到n个电话号码。我想列出员工姓名和他们的电话号码。我正在使用下面的查询运行正常。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid 员工表可能包含大量行。我一次只想获取一些员工。例如,我想获取3名员工的电话号码。我正在尝试运行此查询。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid 但是我得到这个错误。ERROR: column …

3
带有子查询的大表更新缓慢
对于SourceTable具有> 15MM的记录和Bad_Phrase具有> 3K的记录,以下查询需要将近10个小时才能在SQL Server 2005 SP4上运行。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 用英语来说,此查询计算的是Bad_Phrase中列出的,是字段Name中的子字符串的不同短语的数量,SourceTable然后将结果放入字段中Bad_Count。 我想要一些有关如何使此查询运行得更快的建议。


1
与日期比较的子查询效果不佳
当使用子查询查找具有匹配字段的所有先前记录的总数时,在只有5万条记录的表上,性能会很糟糕。没有子查询,查询将在几毫秒内执行。使用子查询,执行时间超过一分钟。 对于此查询,结果必须: 仅包括给定日期范围内的那些记录。 包括所有先前记录的计数,不包括当前记录,无论日期范围如何。 基本表架构 Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns 示例数据 Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 2017-05-30 预期成绩 对于日期范围2017-05-29,以2017-05-30 …

2
SQL如何使用子查询删除
我们的开发人员之一添加了以下代码,以从表中删除重复的记录: DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 查看代码时,我认为它不起作用,但是在我们的测试环境(SQL 2014)中对其进行测试表明它可以! SQL如何知道如何解析子查询并从中删除记录table?

1
为什么我的SQL Server查询在UPDATE上的行为不同于在SELECT上的行为?
我编写了一个SQL Server查询,该查询在对字段进行分区后将记录更新为具有序号。当我将其作为SELECT语句运行时,一切看起来都很不错: DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 FROM ( SELECT [MRDFStorageID], [RunDetailID], …

3
SQLITE:标签和产品问题
我正在寻找一种创建查询以执行以下操作的方法: 让我们考虑3个表: 产品:产品清单 标签:标签列表 tag_ties:用于将标签与产品关联的表 让我们为每个表考虑以下结构: 产品: id(int,自动递增) 名称(varchar,产品名称) 标签: id(int自动递增) 标签(varchar,标签的标签) 标签: id(int,自动递增) tag_id(整数,引用标记ID) ref_id(int,引用产品ID) 我想要的是: 获取所有带有标签ID 10、11和12的产品。 该查询不起作用,因为它返回具有至少一个标签的产品: select p.name as name, p.id as id from products p inner join tag_ties ties on p.id=ties.ref_id where ties.ref_id=p.id and ties.tag_id in (10,11,12) group by p.id order by p.name asc
10 query  sqlite  subquery 

3
添加子查询时,PostgreSQL查询非常慢
我对具有150万行的表进行了相对简单的查询: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 输出: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
MySQL:在内部查询中使用“ ORDER BY”优化UNION
我只是建立了一个由多个具有相同布局的表组成的日志系统。 每个数据源都有一个表。 对于日志查看器,我想 UNION所有日志表, 通过帐户过滤它们, 添加一个伪列以标识源, 按照时间排序他们, 并限制它们的分页。 所有表都包含一个称为zeitpunkt索引日期/时间列的字段。 我的第一次尝试是: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730) ORDER …

1
如何从以下查询中获取层次结构值?
我有一个名为的表Category,其中有一个名为的列CategoryID。同一张表中有一个引用列,称为fParentCategoryID。 我需要用逗号分隔所有类别ID及其子类别ID。例如-如果父类别ID为10,而父类别ID为20,则我打印类别ID 20时,我需要同时打印1和10作为其父,并以逗号分隔。 我尝试了以下查询,但我得到NULL了ParChild专栏。请帮忙。 ;WITH cteReports AS ( SELECT c.CategoryID, c.fParentCategoryID, [level] = 1, ParChild=cast(CAST(c.fParentCategoryID AS VARCHAR(200)) + ',' + CAST(c.CategoryID AS VARCHAR(200)) AS VARCHAR(MAX)) FROM retail.Category c WHERE c.fParentCategoryID is NULL UNION ALL SELECT c.CategoryID, c.fParentCategoryID, [level] + 1, ParChild = ParChild + ',' + CAST(c.CategoryID AS VARCHAR(200)) FROM …

3
检查子查询结果中是否有任何值
我有一个复杂的子查询,该查询返回订单ID列表。我需要获得拥有这些订单的客户列表。问题是有两种将客户分配给订单的方式(两个字段之一)。我可以做这样的事情: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 问题在于,子查询在执行时间和屏幕空间上都是巨大的。有没有一种方法可以检查其中一个字段是否包含所需结果之一?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.