Questions tagged «join»

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

1
为什么这个LEFT JOIN的表现比LEFT JOIN LATERAL差很多?
我有以下表格(来自Sakila数据库): 电影:film_id是pkey 演员:actor_id是pkey film_actor:film_id和actor_id是影片/演员的键 我正在选择一部特定的电影。对于这部电影,我还希望所有演员都参与该电影。我对此有两个查询:一个带有a LEFT JOIN和一个带有a LEFT JOIN LATERAL。 select film.film_id, film.title, a.actors from film left join ( select film_actor.film_id, array_agg(first_name) as actors from actor inner join film_actor using(actor_id) group by film_actor.film_id ) as a on a.film_id = film.film_id where film.title = 'ACADEMY DINOSAUR' order by film.title; select film.film_id, …

6
为什么不能在联接中使用空值?
我已经通过使用...解决了查询问题,row_number() over (partition by这是一个更笼统的问题,为什么我们不能在联接中使用具有空值的列。为什么不能为了联接而将null等于null?
13 oracle  join  null 

3
我应该使用SQL JOIN还是IN子句?
我对最佳方法有疑问。当将数据视为大小可变时,我不确定哪种方法最好。 考虑以下3个表: 雇员 EMPLOYEE_ID,EMP_NAME 项目 PROJECT_ID,PROJ_NAME EMP_PROJ(上面两个表中的许多表) EMPLOYEE_ID,PROJECT_ID 问题:给定EmployeeID,找到与该Employee关联的所有项目的所有雇员。 我用两种方法尝试过。无论使用什么数据大小,这两种方法的区别仅相差几毫秒。 SELECT EMP_NAME FROM EMPLOYEE WHERE EMPLOYEE_ID IN ( SELECT EMPLOYEE_ID FROM EMP_PROJ WHERE PROJECT_ID IN ( SELECT PROJECT_ID FROM EMP_PROJ p, EMPLOYEE e WHERE p.EMPLOYEE_ID = E.EMPLOYEE_ID AND E.EMPLOYEE_ID = 123) 走 select c.EMP_NAME FROM (SELECT PROJECT_ID FROM EMP_PROJ WHERE …
13 postgresql  join 

4
查询以选择联接上的最大值
我有一个用户表: |Username|UserType|Points| |John |A |250 | |Mary |A |150 | |Anna |B |600 | 和级别 |UserType|MinPoints|Level | |A |100 |Bronze | |A |200 |Silver | |A |300 |Gold | |B |500 |Bronze | 我正在寻找一个查询来获取每个用户的级别。类似于以下内容: SELECT * FROM Users U INNER JOIN ( SELECT TOP 1 Level, U.UserName FROM Levels L …

4
将大查询分为多个小查询是否更好?
在某些情况下,需要进行非常大的查询才能将多个表及其中的子选择语句连接在一起以产生所需的结果。 我的问题是,我们应该考虑使用多个较小的查询,并通过多次查询数据库来将逻辑操作带入应用程序层,还是一次完成所有查询就更好了? 例如,考虑以下查询: SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = "%1$d")) AND …

1
PostgreSQL 9.6中不需要的Nest Loop与Hash Join
我在PostgreSQL 9.6查询计划上遇到麻烦。我的查询如下所示: SET role plain_user; SELECT properties.* FROM properties JOIN entries_properties ON properties.id = entries_properties.property_id JOIN structures ON structures.id = entries_properties.entry_id WHERE structures."STRUKTURBERICHT" != '' AND properties."COMPOSITION" LIKE 'Mo%' AND ( properties."NAME" LIKE '%VASP-ase-preopt%' OR properties."CALCULATOR_ID" IN (7,22,25) ) AND properties."TYPE_ID" IN (6) 我为上述表启用了行级安全性。 使用set enable_nestloop = True,查询计划器将运行嵌套循环,其总运行时间约为37秒:https : //explain.depesz.com/s/59BR …

2
使用来自SQL Server中另一个表的值更新表
我的数据库中有2个表。 表格1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- 表#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- 在表#1的列地址和PHONE2是空的和列性别和生日的值是相同的表#2。 我怎样才能读取表#2和更新数据的地址和PHONE2表#1的值从表#2 的地址和电话列时,性别和出生日期是各行中的一样吗? 例如:这是表#1中的一些数据 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 …

2
[FROM x,y]在Postgres中是什么意思?
我刚刚开始使用Postgres。阅读此文档时,我遇到了以下查询: SELECT title, ts_rank_cd(textsearch, query) AS rank FROM apod, to_tsquery('neutrino|(dark & matter)') query WHERE query @@ textsearch ORDER BY rank DESC LIMIT 10; 我可以理解此查询中的所有内容,但以下内容除外:FROM apod, ...。 这,是什么意思?我习惯于联接,但不能联接多个FROM用逗号分隔的语句。 我在网上搜索无济于事。在查看并思考之后,在我看来,它正在声明一个名为query的变量,因此它可以多次使用。但是,如果这是真的,那又有什么关系FROM呢?
12 postgresql  join 

1
将两个事件表合并为一个时间表
给定两个表: CREATE TABLE foo (ts timestamp, foo text); CREATE TABLE bar (ts timestamp, bar text); 我想编写一个查询,对于回报值ts,foo以及bar代表最新的值的统一视图。换句话说,如果foo包含: ts | foo -------- 1 | A 7 | B 并bar包含: ts | bar -------- 3 | C 5 | D 9 | E 我想要一个返回的查询: ts | foo | bar -------------- 1 | A …

1
如何优化查询,使其首先查找一个索引,然后查找另一个索引
我有两组来自卫星数据的地球测量数据,每组都有时间字段(均值朱利安日期为mjd)和地理位置(GeoPoint,空间),并且我正在寻找两组数据之间的重合,以使它们的时间与阈值相匹配。 3小时(或0.125天),且彼此之间的距离不超过200公里。 我已经为表和空间表上的mjd字段都建立了索引。 当我刚刚加入时间限制时,数据库将在8秒内计算100,000个匹配项,并计算该时间内所有100,000个匹配项的距离。查询如下所示: select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on h.mjd between m.mjd-.125 and m.mjd+.125 option( table hint ( h, index(ix_MJD) ), table hint( m, index(ix_MJD) ) ) 执行的计划是: 排序后,有9条距离在200公里以下,因此有比赛。问题是,当我添加距离约束并改为运行它时, select top 10 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on …


3
计算系列中每个日期覆盖多少日期范围的最快方法
我有一个表(在PostgreSQL 9.4中)看起来像这样: CREATE TABLE dates_ranges (kind int, start_date date, end_date date); INSERT INTO dates_ranges VALUES (1, '2018-01-01', '2018-01-31'), (1, '2018-01-01', '2018-01-05'), (1, '2018-01-03', '2018-01-06'), (2, '2018-01-01', '2018-01-01'), (2, '2018-01-01', '2018-01-02'), (3, '2018-01-02', '2018-01-08'), (3, '2018-01-05', '2018-01-10'); 现在,我想为给定的日期和每种类型计算dates_ranges每个日期落入多少行。零可能会省略。 所需结果: +-------+------------+----+ | kind | as_of_date | n | +-------+------------+----+ | 1 | …

4
如何获得计数为零的组?
我将尝试从SQL Server数据库中的数据制作图形。我会在所有街道上都看到这条街上生活的用户数,即使计数为零。 为此,我尝试了以下查询: Create table Streets( ID int IDENTITY primary key, Name varchar(100) ); create table users( ID int IDENTITY primary key, Username varchar(100), StreetID int references Streets(id) ); insert into streets values ('1st street'), ('2nd street'), ('3rd street'), ('4th street'), ('5th street'); insert into users values ('Pol', 1), ('Doortje', …

2
SQL连接查询以显示一个表中不存在行的行
我正在尝试完成一些有关员工时间记录的报告。 我们有两个专门针对此问题的表格。Members表中列出了员工,他们每天输入他们已执行的工作的时间条目并将其存储在Time_Entry表中。 使用SQL Fiddle进行设置的示例:http ://sqlfiddle.com/#!3/e3806/7 最终的结果我要的是一个表,表示所有的Members列中的列表,然后将展示他们的总和小时,在其他列查询的日期。 问题似乎是,如果Time_Entry表中没有特定成员的行,那么该成员现在将有一行。我尝试了几种不同的联接类型(左,右,内部,外部,完全外部等),但似乎没有一种能满足我的要求(基于SQL Fiddle的最后一个示例): /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 | 0 | 0 CJones | 0 | 11-10-2013 | 0 | 0 DSmith …

2
Postgres JOIN条件与WHERE条件
Postgres新手在这里。 我想知道此查询是否已优化?我尝试仅加入100%必需的值,并将所有动态条件保留在WHERE子句中。见下文。 SELECT * FROM myapp_employees JOIN myapp_users ON myapp_users.user_id=myapp_employees.user_id JOIN myapp_contacts_assoc ON myapp_contacts_assoc.user_id=myapp_users.user_id JOIN myapp_contacts ON myapp_contacts.contact_id=myapp_contacts_assoc.contact_id WHERE myapp_contacts.value='test@gmail.com' AND myapp_contacts.type=(1)::INT2 AND myapp_contacts.is_primary=(1)::INT2 AND myapp_contacts.expired_at IS NULL AND myapp_employees.status=(1)::INT2 AND myapp_users.status=(1)::INT2 LIMIT 1; 注意:对于上下文,此proc正在检查用户是否也是雇员(特权/不同用户类型)。 无论如何,这是正确的方法吗?例如,JOIN ON是否应该包含更多的语句,例如检查是否为expired_at IS NULL?为什么或为什么这没有道理?

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.