问题标签 [lateral-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
491 浏览

sql - 如何使用子查询优化 sql 查询,也许是通过横向连接?

我正在尝试优化复杂的 sql 查询,它将在每次地图绑定框更改时执行。我以为那INNER LATERAL JOIN会是最快的,但事实并非如此。有谁知道如何加快这个查询以及如何更好地利用LATERAL JOIN

我做的最快的查询:

计划时间:~0.605 ms 执行时间:~37.232 ms

实际上与上面相同,但使用LATERAL JOIN,它更慢是正确的吗?

计划时间:~1.353 ms 执行时间:~38.518 ms

子查询中子查询最慢的查询(这是我的第一个,所以我对其进行了一些改进):

计划时间:~1.017 ms 执行时间:~41.288 ms

0 投票
0 回答
359 浏览

mariadb - MariaDB GROUP_CONCAT 横向派生

我有两个 MariaDB 实例在两台不同的机器上运行 1. iMac(2012 年末,32GB)OSX 10.13.3(High-Sierra) 2. 全新的 Intel-Server with 4 cores (VMWare) 64GB Exclusive Database-Server

在两台机器上都安装了 MariaDB 10.3.4(MariaDB 10.3 的最新测试版)

我创建了两个视图,而第二个使用第一个,如下所示。

第一视角

第二视图

当我在我的 6 岁 iMac 上运行第二个视图时,MariaDB 的缓冲池大小最大为 5GB,查询需要 200 毫秒来处理 200 行。

在具有 32GB 缓冲池大小的全新英特尔服务器上,相同的查询需要 6 到 10 秒。

两台机器上的数据库在索引、约束和所有其他方面都是完全相同的。唯一明显的区别是使用 EXPLAIN 完成的查询的结果

iMac:在此处输入图像描述 英特尔服务器:在此处输入图像描述 什么可能导致具有相同版本的两个 MariaDB 实例出现如此不同的行为? 在此处输入图像描述

这里的第一个 EXPLAIN SELECT 再次如图

0 投票
3 回答
968 浏览

postgresql - PostgreSQL:通过横向连接相关的值的总和

我正在尝试清理 PostgreSQL 表中的数据,其中一些记录在email_address(由于已修复的错误导致的挫败感,有问题的记录是由激动的用户输入的):

所需的查询输出

我想构建一个查询,用亵渎分数注释数据表中的每一行,并按分数对记录进行排序,以便人类可以浏览带注释的数据(在网络应用程序中呈现)并采取必要的行动:


尝试#1

我正在采用的方法是建立一个正则表达式列表(现在我有 2 个问题......)和分数,如果在 email_address 列中找到该词,那么非常亵渎的词将贡献很大的亵渎分数。我的profanities桌子看起来像这样:

横向连接

我发现我可以在函数上使用LATERAL连接regexp_matches来从每个函数中提取所有脏话email_address(但没有脏话的记录会被丢弃):

这会产生以下结果:

子选择

我还想出了如何使用以下 SQL 获取每条记录的亵渎分数小计数组:

正确地产生所有行(包括没有亵渎的行),如下所示:


问题

如何对横向连接的结果求和以获得所需的输出?

我可以使用另一种策略来获得所需的结果吗?


我已经在http://sqlfiddle.com/#!17/6685c/4上为这个问题发布了一个实时代码小提琴

0 投票
0 回答
122 浏览

mysql - 在 MySQL 中选择来自同一子查询的结果的联合

假设我有一个看起来像这样的查询:

这工作正常。现在,假设我想将这些结果与 and 的反向联合ab即:

这也很好用。但请注意,select id from tbl1子查询是重复的。

我的问题是,如何在不使用临时表的情况下存储此子查询的结果,以便select联合中的每个都可以引用它?

0 投票
1 回答
1195 浏览

php - 使用 jsonb_to_recordset 查询生成器原始横向连接

希望是一个非常简单的问题。我正在尝试根据我的 postgresql 查询在 Laravel 中创建一个查询,并且我很难转换这个特定的连接,因为它是使用 jsonb_to_recordset 的横向连接。

这是我到目前为止所尝试的,它说我的论点太少了。我知道它会喜欢'a'、'='、'b',但我不确定如何将'on true' 翻译成那个以及连接的横向方面。

最后,我尝试将整个查询发布到 Model::raw(DB::raw("......

0 投票
1 回答
793 浏览

sql - tsvector 的串联导致 Postgres 9.4.6 中的语法错误

在 SQL 查询中连接来自 setweight 的 tsvectors 时,会引发语法错误:

如果我用返回的单个 tsvector 尝试它,它工作正常setweight,如果我尝试将整个东西包装在另一个to_tsvector调用中,它会因为没有to_tsvector(tsvector)函数而出错,所以连接确实形成了一个 tsvector。

我尝试将它包装在一个子查询中,但这使它成为一个记录,这会导致问题ts_rank_cd,因为它预计textsearch是 tsvector 类型。我怎样才能让这个连接的 tsvector 在这个查询中工作?

0 投票
2 回答
566 浏览

sql - OUTER APPLY 和 OUTER JOIN 有什么区别,何时使用?

在 SQL Server 中,Left 和 OUTER JOIN 有什么区别?

0 投票
1 回答
1196 浏览

python - 将横向连接查询转换为 sqlalchemy

我很难将我在 sql (postgres) 中创建的查询翻译成 sqlalchemy。特别是,我在 sqlalchemy 中尝试的映射导致了荒谬的递归结果,其运行速度比我最初编写的要慢得多。

给定以下类型的表结构:

我正在尝试使用以下方式检索成对的主要和辅助数据:

  1. 我们匹配给定的属性
  2. 我们只返回“一些”原始数据(比如 1000)
  3. 我们返回“最好的”原始数据,即具有最多次要数据的原始数据。
  4. 每个主要条目我们只能得到“一些”(比如 10 个)辅助数据

第一个很容易通过两个表之间的连接来完成,但是第二个更复杂。我在原始 SQL 中使用的解决方案(请参阅此处了解导致我使用此解决方案的解释)是:

我已尽最大努力将其转换为 sqlalchemy,但是我一直遇到问题,即生成的查询在FROM横向连接查询的子句中重写了子查询。

例如,下面的 sqlalchemy 代码(假设表对象定义与上述匹配)是部分解决方案。我想我可以添加缺少的列(正如您将在生成的 sql 中看到的那样):

长形式的连接查询如下,具有上述荒谬的嵌套结构:

再一次,我意识到这是一个不完整的尝试,因为并不是所有的列都在一开始就被 SELECTed,但关键问题是sqlalchemy 在横向连接子查询中创建了大量的嵌套查询。这是我一直无法解决的核心问题,除非解决了,否则完成剩下的查询毫无意义。

0 投票
2 回答
2851 浏览

sql - 将 OUTER APPLY 转换为 Redshift

我有需要转换为 Redshift 的 MSSQL Server 脚本

这是脚本的一部分

我有错误

'(', ',', , , , AT, CROSS, EXCEPT, FETCH, FULL, GROUP, HAVING, INNER, INTERSECT, ISNULL, JOIN, LEFT, LIMIT, MINUS, NATURAL, NOTNULL, OFFSET, OPERATOR, ORDER, RIGHT , UNION, WHERE 或 '[' 预期,得到 'OUTER'

在这一行OUTER APPLY

如何将这些东西转换为 Redshift?

0 投票
1 回答
4634 浏览

postgresql - PostgreSQL 错误:带有 JSON 集合返回函数的 CASE

我有一个带有使用 JSON 函数的 CASE 的 SELECT 语句,它在升级到 PostgreSQL 10 时停止工作。

错误:在 CASE 中不允许设置返回函数

提示:您也许可以将 set-returning 函数移动到 LATERAL FROM 项中。

我不明白如何使用 LATERAL FROM 是一种替代方法。事实上,即使阅读PG 文档(第 7.2.1.5 节) ,我也不完全理解为什么要使用 LATERAL 。

任何想法如何将此语句转换为与 PG 10 一起使用?