问题标签 [cross-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.
c# - 如何在数据表上执行交叉连接
我要对数据表(table1 X table2 X table3 X n 表)执行交叉连接(多对多关系)。这可以使用 for/foreach 循环或 linq 来完成。但不知道我应该选择哪一个或任何其他可用选项。
注意:我正在从 .xls 文件中读取数据,因此无法进行 sql 查询。
mysql - 如何连接表以获得每一行源表的一行?
我在两个表中有两种不同类型的实体,只有几个公共列我想加入并按其中一个公共列排序。在结果表中,每一行应该代表一个表中的一行或另一个表中的一行。例如,对于这样的表:
我对加入他们的查询的想法是这样的:
我发现此查询存在一些问题:
如果我了解它
CROSS JOIN
的工作原理,查询将非常慢,因为它会遍历所有可能的苹果-橙子组合,不是吗?有更快的方法吗?这些
IF(...)
功能看起来很难看。他们真的有必要吗?
join - MDX 查询中的分组
我是 MDX 世界的新手..
我想仅根据 3 行对列进行分组。但是,也需要加入第 4 行。我的查询是:
输出为:
但是,我希望我的输出显示为:
即,我想对前两行进行分组,以使第三列中没有重复的“全部”。
提前致谢
sql - 是否可以在 Access 2003 上使用 CROSS JOIN + INNER 和/或 OUTER 连接?如果是这样,怎么做?可能还需要子查询...?
我有一个包含几个表的数据库:[Plan Revenue]、[Plan Revenue Expense]、[Support Provider]、[Z Service Codes New]
我已经编写了一个查询,可以让我计算在过去 6 个月的特定服务代码中为每个提供商列出了多少费用记录。唯一的问题是,理想情况下,我希望它还列出过去 6 个月内未记录任何费用的服务代码的 0。
因此,基本上,我想将 [Z Service Codes New] 表与 [Support Providers] 表交叉,以获得提供者和所有服务代码之间的所有可能匹配。然后,在每个服务代码中,我希望它计算过去 6 个月内的费用记录数(嗯,我实际上已经设置了自定义日期,所以它更灵活)。
但是我一直坚持如何做到这一点,因此它不会将所有费用记录与所有服务代码匹配,而是仅将那些属于正确服务代码的费用记录(如果有)匹配。
[Plan Revenue].[Service] 是与 [Z Service Codes New] 匹配的外键。[Service Code] [Plan Revenue].[Rev ID] 是与 [Plan Revenue Expense] 匹配的外键。 [RevID] [Plan Revenue Expense].[SP] 是与 [Support Provider].[ID] 匹配的外键
不要问我为什么为了简单起见,数据库构建器没有让他们的键从一个表匹配到下一个表。就是这样……
我当前的查询看起来像这样:
[IC?], [DE?], [Agency?], [GeneralBus?]
只是表示支持提供者类型的布尔字段。同样,为什么数据库人员选择这个而不是带有外键的单个字段,所以你只能是一种类型的提供者,我不知道......只是滚动它。
所以,我目前也在使用子查询。
但是,它并没有给我没有费用相关的服务代码零。它只是给我计算实际费用,如果我不关心 0 就好了,我有点这样做......如果只是为了我自己的教化。
我觉得我在最后一天左右一直在玩这个东西,我的大脑是朋友。需要第二双眼睛。
我觉得我需要将 [Support Provider] 与 [Z Service Codes New] 交叉加入,以便获得所有可能的匹配项,然后以某种方式选择性地给出 0(如果没有相关的费用记录)或 COUNT(如果有费用)记录。但无论如何,我都希望每个支持提供商都有一个服务代码。
不确定在 Access 中将 CROSS JOIN 与某种 INNER JOIN 或 OUTER JOIN 组合的语法是什么?对于我的目的来说,最好的组合是什么。我可以在没有子查询的情况下以某种方式逃脱,还是我仍然需要它?与 CROSS JOIN 相比,有没有更好的方法来做到这一点?(我认为这就是 CROSS JOIN 的设计目的......但我可能错了吗?)
希望一切都说得通。想法?哦,我正在使用 Access 2003 Professional SP3。
编辑:
好的,我自己的优雅解决方案(好吧,好吧,我不知道它是否优雅,但它有效!)是在我的主 FROM 行中创建两个自定义 SELECT 语句,然后根据两个匹配条件加入两个 SELECT 语句:
问题解决了!
我认为必须用语言表达问题有助于解决问题,因为我让自己考虑实际问题是什么,哪些特定信息需要成为交叉产品,哪些信息需要更标准的连接操作以及如何正确链接这两组...
〜MG(我)
mysql - 使用 (0,1)^T 交叉连接表的首选方式?
我有一个表 T1,我想得到一个包含两倍行的新表:一个额外的列,它得到 0(对于 T1 的一个副本)和 1(对于 T1 的第二个副本)。
换句话说,我想将 T1 与一个带有一个布尔列和所有可能值的常量表交叉连接。
在 MySQL 中执行此操作的最佳/最有效/更合适的方法是什么?
sql-server-2005 - 始终使用相同的字符串消息进行交叉连接
我正在使用 Microsoft SQL Server 2005。
我想在输出中有一个表,其中包含一个关于交叉连接中重复值的列,一个表只包含一个具有相同字符串消息的列。我认为使用“字符串消息”进行交叉连接应该是正确的方法。
为什么以下脚本不起作用?
sql-server - 避免交叉连接
我有三个表:学生,问题和答案。答案对学生和问题都有 FK。我对学生和问题使用了交叉连接:
此过程的目的是确定给出的学生/问题是否有相应的答案。我的问题是,有没有办法不使用交叉连接来实现相同的目标?此外,最好返回一个包含答案条目的集合。
sql - 交叉连接同一表中的 N 组行
我有一个通用的“Dimension”和“DimensionMember”表。
这些表存储了大量的维度和维度成员。
我想从可变数量的维度交叉连接维度成员。示例:来自 'Sex'、'Employment Type'、'Contract Type' 维度的交叉连接维度成员应产生以下组合
组合的标签应通过连接维度成员的标签来创建(如上所示)。
先感谢您
更新
维度列表(例如“性别”、“就业类型”、“合同类型”)是动态的(由运行时的另一个查询生成)。
更新 2
修复了一个小错误(Dimension1 -> Dimension)。对不起!
performance - 需要一些关于从相当复杂的来源编写大型报告查询的最佳方法的建议
在搜索了其他答案以查看是否已经提出了这个特定问题(并且已经提出了其他口味 - 只是没有涵盖我需要询问的所有内容)之后,我想提出以下场景并就最常见的问题寻求建议创建此报告查询的有效方法。这是一篇冗长的帖子,不幸的是,我不允许发布任何 T-SQL 代码——我的雇主明确禁止这样做。
这些年来我学到的一件事是,有很多人比我知道的多得多——所以在搜索并没有找到你需要的东西之后,问问别人吧:)
所有表都有主键,如果有链接到子表的表,则有外键。数据库和报表服务器是 SQL 2008 R2。该服务器运行 128GB RAM,是一个 4CPU 四核超线程野兽。
首先,我有一组包含 Locations、Sections 和 Areas 的表。位置通过映射表链接到部分 - 部分有多个位置,部分通过映射表链接到区域,并且有多个部分到区域。这些表都位于数据库“A”中。我在一个单独的数据库“B”中创建了一个视图,它代表了一个快速执行的漂亮结果集中的区域 - 部分 - 位置链接。我称之为 LocationSectionArea 视图。
在数据库“B”中,成千上万的用户正在输入他们关于他们工作的各种类别的日常统计数据。目前有91个类别。每个类别将包含从大约 3 个到多达 25 个不等的子类别。类别和子类别的数量可以随时更改,通过管理界面添加或删除更多。我创建了一个视图来表示这些链接并返回一个名为 CategorySubCategoryFields 视图的结果集。
为每个类别/子类别链接收集的信息各不相同 - 有些需要大约 8 个不同的字段,有些需要 3 个,有些只需要 1 个。这些字段链接到相应的子类别。这再次包含在数据库“B”中。
我已经构建了一个视图,可以很好地将这些数据放在这个数据库中,最终得到一个大的结果矩阵,以一种可以很容易报告的方式呈现数据,并且到目前为止的视图执行似乎是完全可以接受的速度。我称之为 UserStatsView。这包含在数据库“B”中。
现在 - 输入数据的用户被分配到前面提到的位置之一。结果需要显示一个部分内的所有位置,一个区域内的所有部分,以及每个位置显示该类别的每个类别和子类别。然后需要将其链接到来自 UserStatsView 的结果,因此您最终会得到一个相当大的这些结果矩阵,其中混杂着许多没有结果的 0 - 但它们是为报告目的而创建的。
报告必须允许用户,例如,选择一个部分,然后生成该部分中包含的所有位置的报告,以及用户为该位置输入的结果的统计 - 对于每个类别-子类别组合有。无论用户是否输入了实际结果,它都必须显示该部分的所有位置和所有类别-子类别。因此,某些报告上可能有很多 0。
为此,我创建了一个将 LocationSectionArea 与 CategorySubCategoryFields 视图交叉连接的结果视图。这创建了我想要的基本矩阵。然后我将这个矩阵加入到 UserStatsView 的结果中,加入 LocationId、CategoryId 和 SubCategoryId 以插入位置的用户结果。这都是在数据库“B”中创建的。
现在,如果您在最后的 where 子句中提供足够的过滤器以减少记录数量,这一切都可以正常工作并且“可以”。正如您所想象的那样 - 如果他们尝试运行具有更大结果集的报告 - 它开始变得非常缓慢。(即,涵盖所有地点 6 个月的日期范围需要超过 30 秒)
我的部分问题是我相信位置信息是从数据库“A”链接进来的,并且构造的视图包含在数据库“B”中,以及该报告所需的所有其他信息的所有视图表和记录。
另一部分是我相信创建的非常大和复杂的交叉连接然后链接到用户结果的视图。交叉连接是在与 UserStatsView 结果集连接之前没有索引或相关数据的笛卡尔结果。
我认为的第三个问题是,正在“创建”数据以填补所有空白,以便生成可以输入 SSRS 的结果结构。我已经看到表假脱机和散列连接占用了大量执行时间,以及从数据库中查找位置、部分和区域。这些都通过查询执行估计计划显示出来。
我要问的是,根据上述标准,是否有人知道是否有更好的方法来生成此结果集。我是否完全错过了一种非常简单快捷的方法,这很有可能:)。如果有人可以建议我应该研究什么,我会很乐意去做——只是不确定现阶段要研究什么?
干杯
杆。
更新:以下是定义两个数据库的表结构,。显然,真正的桌子还有更多,但这是它们如何挂在一起的关键。请原谅这么大的帖子 - 我已经删除了除了关键字段和一些数据字段之外的所有内容,以便您查看表格的结构。表名和字段名已更改为通用名称,删除了许多额外字段,因此我可以发布代码。
数据库 A
数据库 B
视图:数据库 A 中的区域-截面-位置视图 (vwAreasSectionsAndLocations)
数据库 B 中的 Category-SubCategory 视图 (vwCategoryAndSubCategory)
视图交叉连接两个视图以创建所需的结果矩阵(无结果)(vwAreaSectionLocationCategorySubCategory)
创建使用统计结果的视图 (vwUserStatsResults)
最后是把所有东西放在一起的视图 (vwReportResults)
由于字数限制,在另一个条目中发表
sql - 交叉连接中的 SQL Server 子查询返回错误
我有桌子A
,B
和C
。现在表A
作为列A1
(主键),表B
有列B1
(主键),表C
有列A1
(表的外键A.A1
),B1
(表的外键B.B1
)。
现在我正在编写一个查询,其中列出了所有行A
和B
一个位列,如果在表中找到匹配的行,则该列将设置为 1,C
否则为 0。
Subquery returned more than 1 value.
即使在组合A1
和列后查询没有重复行,此查询也会产生错误B1
。