Questions tagged «join»

SQL连接子句将来自两个或多个表或视图的记录组合在一起。

2
一个大查询或多个小查询哪个更快?
我曾在不同的公司工作过,并且我注意到其中有些人更喜欢将视图与所有“亲戚”一起加入表格中。但是随后在应用程序上,我们只需要使用1列。 因此,仅进行简单选择,然后在系统代码上“联接”它们会更快吗? 该系统可以是php,java,asp,也可以是连接到数据库的任何语言。 所以问题是,从服务器端(php,java,asp,ruby,python ...)到数据库的运行速度更快,运行一个查询即可获得我们所需的一切,或者从服务器端运行到数据库并运行一个查询一次只能从一个表中获取列?

4
使用LEFT JOIN或NOT EXISTS之间的最佳实践
在使用LEFT JOIN或NOT EXISTS格式之间有最佳实践吗? 相对于另一个使用什么有什么好处? 如果没有,则应首选? SELECT * FROM tableA A LEFT JOIN tableB B ON A.idx = B.idx WHERE B.idx IS NULL SELECT * FROM tableA A WHERE NOT EXISTS (SELECT idx FROM tableB B WHERE B.idx = A.idx) 我在Access中使用SQL Server数据库查询。

2
如何用表值函数联接表?
我有一个用户定义的函数: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end 现在,我想将其加入另一个表,如下所示: select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 换句话说,对于所有Foo记录,其中SomeCriterion均为1,我想查看Foo ID和Desc以及输入所返回的Field1和的值。Field2ut_FooFuncFoo.ID 这样做的语法是什么?

4
单个查询的速度快于联接的速度吗?
概念性问题:单个查询的速度是否比联接更快?或者:我是否应该尝试将客户端上想要的每个信息都压缩到一个 SELECT语句中,或者仅使用看起来方便的数量? TL; DR:如果我加入的查询花费的时间比运行单个查询所花费的时间更长,这是我的错还是应该这样? 首先,我不是非常了解数据库,所以可能只是我一个人,但是我注意到当我必须从多个表中获取信息时,通过对单个表进行多次查询来获取此信息“通常”更快(也许包含一个简单的内部联接)并在客户端将数据修补在一起,以尝试编写一个(复杂的)联接查询,在此我可以在一个查询中获得所有数据。 我试图将一个非常简单的示例放在一起: SQL小提琴 模式设置: CREATE TABLE MASTER ( ID INT NOT NULL , NAME VARCHAR2(42 CHAR) NOT NULL , CONSTRAINT PK_MASTER PRIMARY KEY (ID) ); CREATE TABLE DATA ( ID INT NOT NULL , MASTER_ID INT NOT NULL , VALUE NUMBER , CONSTRAINT PK_DATA PRIMARY KEY …

2
为什么更改声明的连接列顺序会引入排序?
我有两个表,它们具有相同的命名,类型和索引键列。其中一个具有唯一的聚集索引,另一个具有非唯一索引。 测试设置 设置脚本,包括一些实际的统计信息: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL --- and a …

7
mysqldump是否可以转储重现查询所需的数据库子集?
背景 我想提供重现select查询所需的数据库子集。我的目标是使我的计算工作流具有可重现性(就像在可重现的研究中一样)。 题 有没有一种方法可以将这个select语句合并到一个脚本中,该脚本将查询到的数据转储到新数据库中,以便可以将数据库安装在新的mysql服务器上,并且该语句可以与新数据库一起使用。除了已在查询中使用的记录以外,新数据库不应包含其他记录。 更新: 为澄清起见,我对查询结果的csv转储不感兴趣。我需要做的是转储数据库子集,以便可以将其安装在另一台计算机上,然后查询本身可以重现(并且可以针对同一数据集进行修改)。 例 例如,我的分析可能查询需要从多个(在此示例中为3个)表中进行记录的数据子集: select table1.id, table1.level, table2.name, table2.level from table1 join table2 on table1.id = table2.table1_id join table3 on table3.id = table2.table3_id where table3.name in ('fee', 'fi', 'fo', 'fum');

1
在同一查询中具有不同条件的Postgres计数
编辑 Postgres 9.3 我正在处理具有以下架构的报告:http : //sqlfiddle.com/#!15/fd104/2 当前查询工作正常,如下所示: 基本上它是一个3表内部联接。我没有进行此查询,但是留下查询的开发人员想修改查询。如您所见,TotalApplication只计算基于的总申请量a.agent_id。您可以totalapplication在结果中看到该列。我要删除的是并将其更改totalapplication为新的两列。我想添加completedsurvey和partitalsurvey列。所以基本上这部分将成为 SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id 我刚刚添加了,AND disposition = 'Completed Survey'但是我需要另一列partialsurvey具有相同查询的列,completedsurvey唯一的区别是 AND disposition = 'Partial Survey' 和 COUNT(a.id) as PartialSurvey 但是我不知道将查询放在哪里或查询的样子,所以最终输出包含这些列 agent_id, …

2
外部应用与左连接性能
我正在使用SQL SERVER 2008 R2 我刚刚在SQL中遇到了APPLY,并且很喜欢它如何解决很多情况下的查询问题, 我使用2个左联接的许多表都得到结果,我能够获得1个外部应用。 我的本地数据库表中有少量数据,并且在部署之后,该代码应该在至少20倍大的数据上运行。 我担心对于大量数据而言,外部应用可能需要比2个左连接条件更长的时间, 任何人都可以说出Apply的工作原理,以及它如何影响非常大的数据的性能。如果可能的话,每个表的大小与n1 ^ 1或n1 ^ 2 ...成比例关系……其中n1是表中的行数1。 这是带有2个左联接的查询 select EC.*,DPD.* from Table1 eC left join ( select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2 group by member_id,parent_gid,child_gid,LOB,group_gid ) DPD2 on DPD2.parent_gid = Ec.parent_gid AND DPD2.child_gid = EC.child_gid AND DPD2.member_id = EC.member_id AND DPD2.LOB = EC.default_lob AND …

8
INNER JOIN和OUTER JOIN有什么区别?
我是SQL新手,想知道这两种JOIN类型之间的区别是什么? SELECT * FROM user u INNER JOIN telephone t ON t.user_id = u.id SELECT * FROM user u LEFT OUTER JOIN telephone t ON t.user_id = u.id 什么时候应该使用其中一个?
35 join 

1
在某些情况下,在JOIN子句中使用构造可以引入优化障碍吗?
引起我注意的是,查询子句中的USING构造(而不是ON)在某些情况下可能会引入优化障碍。FROMSELECT 我的意思是这个关键词: 选择 * 从一个 加入b 使用(a_id) 仅在更复杂的情况下。 背景:此评论到这个问题。 我用这个了很多,从来没有发现过这么远。我对一个展示效果或进一步信息的链接的测试案例非常感兴趣。我的搜索工作空虚。 USING (a_id)与替代连接子句相比,完美的答案是显示性能较差的测试用例ON a.a_id = b.a_id- 如果这确实可能发生。

6
ON与WHERE的索引表现
我有两张桌子 @T1 TABLE ( Id INT, Date DATETIME ) @T2 TABLE ( Id INT, Date DATETIME ) 这些表在(Id,Date)上具有非聚集索引 我加入这些表 SELECT * FROM T1 AS t1 INNER JOIN T2 AS t2 ON t1.Id = t2.Id WHERE t1.Date <= GETDATE() AND t2.Date <= GETDATE() 这也可以写成 SELECT * FROM T1 AS t1 INNER …

3
Access(Jet)SQL:TableB中的DateTime戳位于TableA中每个DateTime戳的侧面
第一句话 您可以放心地忽略以下(和包括)JOIN的部分:如果仅想破解代码,则从Start入手。的背景和结果只是作为背景。如果您想查看最初的代码,请查看2015年10月6日之前的编辑历史记录。 目的 最终,我想根据表中可用GPS数据的DateTime时间戳(直接在表中观察数据的侧面)来计算发射机(X或Xmit)的内插GPS坐标。SecondTableFirstTable 我的近期目标实现的最终目标是要弄清楚如何最好地加入FirstTable到SecondTable得到这些侧翼的时间点。以后,我可以使用这些信息,并假设沿着等矩形坐标系进行线性拟合,就可以计算GPS中间坐标(用奇特的话说,我不在乎地球是这个范围的球体)。 问题 有没有更有效的方法来生成最接近的前后时间戳? 由我自己解决,方法是仅抓住“之后”,然后仅获取与“之后”相关的“之前”。 是否有一种不涉及(A<>B OR A=B)结构的更直观的方法。 Byrdzeye提供了基本的替代方法,但是我的“现实世界”经验与他的所有4种执行相同策略的加入策略并不一致。但是,他对替代连接样式的解决也深表感谢。 您可能还有其他想法,窍门和建议。 到目前为止,byrdzeye和Phrancis在这方面都非常有帮助。我发现Phrancis的建议非常出色,并在关键阶段提供了帮助,因此在这里我将给予他优势。 我仍然很感激我在问题3方面能获得的任何其他帮助。项目 符号反映了我认为对个人问题最有帮助的人。 表定义 半视觉表示 第一表 Fields RecTStamp | DateTime --can contain milliseconds via VBA code (see Ref 1) ReceivID | LONG XmitID | TEXT(25) Keys and Indices PK_DT | Primary, Unique, No Null, Compound XmitID | …

2
在另一个SELECT的WHERE子句中使用SELECT
我已经在libpq上为PostrgreSQL创建了一个远程应用程序草案。它的性能很好,但是我已经介绍了该应用程序的一般功能。对于我产生的每个最终业务结果,碰巧我调用了40 select子句(通过tcpip)。 我对SQL Server的回忆使我想起尽量减少远程应用程序与数据库之间的交互次数。分析了我的选择之后,我认为可以SELECT使用联接将这个数目减少到3个子句。但是我不记得SELECT在另一个中使用a的结果的语法SELECT。 例如: SELECT * FROM individual INNER JOIN publisher ON individual.individual_id = publisher.individual_id WHERE individual.individual_id = 'here I would like to use the results of a another select' 这另SELECT一种可能是简单的: SELECT identifier FROM another_table WHERE something='something' 这是简化的表格布局,针对不同的item_types减少了很多次...(3种完全不同的类型,因此对3种SQL查询进行了优化)。 table passage id_passage PK business_field_passage bytea table item id_item PK id_passage …

2
SQL Server不会在两个等效分区的表上优化并行合并联接
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 非常抱歉,非常详细的问题。我已包含查询以生成用于重现该问题的完整数据集,并且我在32核计算机上运行SQL Server 2012。但是,我不认为这是特定于SQL Server 2012的,对于此特定示例,我已将MAXD​​OP强制设置为10。 我有两个使用相同分区方案进行分区的表。当在用于分区的列上将它们连接在一起时,我注意到SQL Server无法像人们期望的那样优化并行合并连接,因此选择使用HASH JOIN。在这种特殊情况下,我可以通过基于分区函数将查询分为10个不相交的范围并在SSMS中同时运行每个查询,来手动模拟一个更优化的并行MERGE JOIN。使用WAITFOR精确地同时运行它们,结果是所有查询在原始并行HASH JOIN使用的总时间的约40%内完成。 对于等效分区的表,是否有任何方法可以使SQL Server自行进行此优化?我了解到,SQL Server通常会为了使MERGE JOIN并行而产生大量开销,但是在这种情况下,似乎有一种非常自然的分片方法,开销很小。也许仅仅是一个特殊的情况,优化器还不够聪明以至于无法识别? 下面是设置简化数据集以重现此问题的SQL: /* Create the first test data table */ CREATE TABLE test_transaction_properties ( transactionID INT NOT NULL IDENTITY(1,1) , prop1 INT NULL , prop2 FLOAT NULL ) /* …

3
我可以为左外部联接提供默认设置吗?
假设我有表a(带有a1列)和b(带有b1和b2列),并且我执行了左外部联接 SELECT * FROM a LEFT OUTER JOIN b ON a.a1 = b.b1 然后,b1和b2将为NULL,其中a1的值不匹配b1的值。 我可以为b2提供默认值,而不是NULL吗?需要注意的是COALESCE不会在这里工作,因为我不希望默认值来覆盖潜在的NULL在B2那里是 B1匹配A1的值。 也就是说,a和b为 CREATE TABLE a (a1) AS VALUES (1), (2), (3) ; CREATE TABLE b (b1,b2) AS VALUES (1, 10), (3, null) ; a1 b1 | b2 --- -------- 1 1 | 10 2 3 …
21 postgresql  join 

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.