问题标签 [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 投票
7 回答
86758 浏览

database - 数据库连接何时以及为何昂贵?

我正在对数据库进行一些研究,并且正在研究关系数据库的一些限制。

我知道大表的连接非常昂贵,但我不完全确定为什么。DBMS执行join操作需要做什么,瓶颈在哪里?
非规范化如何帮助克服这一开销?其他优化技术(例如索引)如何提供帮助?

欢迎亲身体验!如果您要发布资源链接,请避免使用 Wikipedia。我知道在哪里可以找到那个了。

与此相关,我想知道 BigTable 和 SimpleDB 等云服务数据库使用的非规范化方法。看到这个问题

0 投票
1 回答
1615 浏览

.net - 如何进行子表的 LINQ 外连接?

我有一个具有这种设置的数据表。

表 A

表 B

表 C

我想使用 LINQ 编写一个查询,对于给定的 A 的 ID,给我一个不在表 C 中的 B 的列表。

所以对于 1 的 AID,我想要 20 和 30 的 BID。

对于 3 的援助,我想要 10 的出价

对于 2 的 AID,什么都没有返回。

我知道 SQL 会是

什么是 LINQ 等效项?

请假设我有与 A、B 和 C 表相匹配的对象。

0 投票
7 回答
16988 浏览

sql - SQL 查找重复条目(在组内)

SQL 查找重复条目(在组内)

我有一个小问题,我不确定修复它的最佳方法是什么,因为我只能有限地访问数据库 (Oracle) 本身。在我们的表“EVENT”中,我们有大约 160k 个条目,每个 EVENT 都有一个 GROUPID,而一个普通条目正好有 5 行具有相同的 GROUPID。由于一个错误,我们目前得到了几个重复的条目(重复,所以 10 行而不是 5 行,只是一个不同的 EVENTID。这可能会改变,所以它只是 <> 5)。我们需要过滤这些组的所有条目。

由于对数据库的访问受限,我们不能使用临时表,也不能向 GROUPID 列添加索引以使其更快。

我们可以使用此查询获取 GROUPID,但我们需要第二个查询来获取所需的数据

一种解决方案是子选择:

如果没有 GROUPID 和 160k 条目的索引,这需要很长时间。尝试考虑可以处理此问题的连接,但到目前为止找不到好的解决方案。

任何人都可以找到一个好的解决方案吗?

小编辑:我们这里没有 100% 重复,因为每个条目仍然有一个唯一的 ID,而且 GROUPID 也不是唯一的(这就是我们需要使用“分组依据”的原因)——或者我只是错过了一个简单的解决方案它 :)

关于数据的小例子(我不想删除它,只是找到它)

EVENTID | GROUPID | TYPEID
123456    123       12
123457    123       145
123458    123       2612
123459    123       41
123460    123       238

234567    123       12
234568    123       145
234569    123       2612
234570    123       41
234571    123       238

它还有更多列,例如时间戳等,但正如您已经看到的,除了 EVENTID 之外,一切都是相同的。

我们将更频繁地运行它以进行测试,以查找错误并检查它是否再次发生。

0 投票
9 回答
1982 浏览

sql - Oracle 连接(左外、右等:S)

我知道 stackoverflow 会帮助我,而不是知道什么是“最喜欢的编程卡通”:P

这是被接受的答案: Bill Karwin

感谢大家的帮助(我想给大家投票)

我的查询结果是这样的(这是真实的)

现在我只需要加入其他表格即可获得人类可读的报告。


原帖

你好。

我挣扎了大约6个小时。现在有一个数据库查询(我的长期克星)

我有一个包含一些字段的数据表,例如:

它用于跟踪票证的历史记录

标识符:是一个客户 ID,如 ( NAF0000001 )

活动:是票的位置(新的、进行中的、拒绝的、关闭的等)

参与者:是当时参加票的人的fk

closedate:是该活动完成的日期。

编辑:我应该说“完成日期”而不是关闭日期。这是活动完成的日期,在工单关闭时不是必需的。

例如,典型的历史可能是这样的:

参与者 1=jonh, 2=scott, 3=mike, 4=rob

和活动 1=新,2=进行中,3=等待批准,4=关闭

等等。还有几十个其他不相关的信息。

那么我的问题如下。

我设法创建了一个查询,我可以在其中知道票证何时打开和关闭

是这样的:

但我不知道哪些票没有关闭以及谁在参加。

到目前为止,我有这样的事情:

那就是给我所有有开始( new = 1 )但没有关闭( closed = 4 )的人

但这里最大的问题是它打印了打开票的参与者,但我需要参加它的参与者。所以我将“进行中”活动添加到查询中。

但并非“新”中的所有行都是“进行中”,并且通过该查询我删除了所有行。

我需要的是显示所有“进行中”的参与者,如果票不是“进行中”,它将显示为空。

类似的东西

在这种情况下

NA002、NA003 和 NA004 处于“新”状态,因此没有显示参与者

尽管

NA005 和 NA006 正在“inprgress (act = 2 )”并且他们正在被 rob (参与者 4 ) 参加

所以我记得有一个东西叫做左外连接或类似的东西,但我从来没有理解过。我想知道的是如何获取“正在进行”和“新”且未关闭的标识符。

可能稍微休息一下会帮助我理清思路。如果有人知道该怎么做,我将不胜感激。

顺便说一句,我试过:

但是给了我与以前相同的结果(仅删除“新”记录)

0 投票
6 回答
15324 浏览

mysql - 左连接优于内连接?

我一直在分析我正在处理的应用程序中的一些查询,我遇到了一个查询,它检索的行数超过了必要的行数,结果集在应用程序代码中被修剪掉了。

将 LEFT JOIN 更改为 INNER JOIN 会将结果集修剪为所需的内容,并且可能还会提高性能(因为选择的行更少)。实际上,LEFT JOIN'ed 查询的性能优于 INNER JOIN'ed,只需一半的时间即可完成。

LEFT JOIN:(总共 127 行,查询耗时 0.0011 秒)

INNER JOIN:(总共 10 行,查询耗时 0.0024 秒)

(我多次运行查询,这些都是平均值)。

在两者上运行 EXPLAIN 不会显示任何解释性能差异的信息:

对于内部联接:

对于左连接:

和查询本身:

(我正在谈论的子句是“用户”表上的最后一个 INNER JOIN)

该查询在 MySQL 5.1 数据库上运行,如果它有所作为的话。

有没有人知道为什么在这种情况下 LEFT JOIN'ed 查询优于 INNER JOIN'ed ?

更新:由于 Tomalak 建议我使用的小表使 INNER JOIN 更加复杂,我创建了一个包含一些模拟数据的测试数据库。'users' 表是 5000 行,contacts 表是 ~500,000 行。结果是一样的(时间也没有改变,当你考虑到现在桌子更大时,这很令人惊讶)。

我还在联系人表上运行了 ANALYZE 和 OPTIMIZE。没有任何明显的区别。

0 投票
6 回答
4971 浏览

sql - MySQL LEFT JOIN SELECT not selecting all the left side records?

I'm getting odd results from a MySQL SELECT query involving a LEFT JOIN, and I can't understand whether my understanding of LEFT JOIN is wrong or whether I'm seeing a genuinely odd behavior.

I have a two tables with a many-to-one relationship: For every record in table 1 there are 0 or more records in table 2. I want to select all the records in table 1 with a column that counts the number of related records in table 2. As I understand it, LEFT JOIN should always return all records on the LEFT side of the statement.

Here's a test database that exhibits the problem:

The Dates table has three records, and the Slots 1 - and that record points to the third record in Dates.

If I do the following query..

..I expect to see a table with 3 rows in - two with a count of 0, and one with a count of 1. But what I actually see is this:

The first record with a zero count appears, but the later record with a zero count is ignored.

Am I doing something wrong, or do I just not understand what LEFT JOIN is supposed to do?

0 投票
10 回答
8313 浏览

php - 用于 PHP 的 SQL Builder,是否支持 JOIN?

你们中是否有人知道一个可以帮助您构建/操作 SQL 查询、支持 JOIN 的库?

如果你有一些东西可以返回一个对象,它有一些查询集,并且仍然能够对其应用 JOIN、子查询等,它会提供很大的灵活性。

我四处搜索,只找到了 SQL Builder,它看起来很基础,不支持连接。这将是一个真正使它有用的主要功能。

0 投票
3 回答
29705 浏览

sql - 关于 LEFT JOIN SQL 查询的 WHERE 帮助

我正在尝试构建一个查询,该查询将包含一个指示用户是否已下载文档的列。我有一个名为 HasDownloaded 的表,其中包含以下列:id、documentID、memberID。找出用户是否下载了特定文档很容易;但我需要生成一个查询,结果如下所示:

ID 并不重要。我感兴趣的是文档是否已下载(是否为 NULL)。

这是我的查询:

问题是,只有在 HasDownloaded 表中存在指定用户的条目时才会返回值。我想保持简单,并且在 HasDownloaded 中只有已下载文档的条目。因此,如果用户 1 下载了 abc、bbb 和 ccc,我仍然希望 ddd 和 eee 显示在结果表中,只是 id 为 NULL。但是 WHERE 子句只为我提供了哪些条目存在的值。

我不是 SQL 专家 - 有没有一个操作员可以在这里给我我想要的东西?我应该采取不同的方法吗?或者这是不可能的?

0 投票
3 回答
2065 浏览

c# - 将数组转换为简单字符串的 C# 方法/语法是什么?

我正在寻找的是 JavaScript 的基本等价物Array::join(),您可以传入分隔符并将其用于所有下标的返回字符串。我当然可以使用 a 或诸如此类的东西编写自己的函数StringBuilder,但 .NET BCL 中必须有一些内置的东西。

编辑:任何东西的数组,不一定是stringor char。我更喜欢简单地调用ToString()每个 subscript的方法objectString.Join()很好,只是你传递了一个字符串数组。

0 投票
9 回答
67072 浏览

sql - 交叉连接的用途是什么?

交叉连接对两组元组执行笛卡尔积。

哪些情况下使这样的 SQL 操作特别有用?