标签: join

MySQL:LEFT JOIN 未按预期工作

我有 2 个表:员工,出勤率 在此处输入图片说明

当我使用 LEFT JOIN 查询时

SELECT employees.eno,employees.name,employees.dept,attendanceIn.attIn FROM `employees` 
LEFT JOIN attendanceIn ON employees.eno = attendanceIn.eno
WHERE date(attIn) like '2016-07-02%'
Run Code Online (Sandbox Code Playgroud)

我得到的是,

实际结果

  • 我的查询有什么问题?
  • 我如何得到我的预期结果?

mysql join

5
推荐指数
1
解决办法
2万
查看次数

如何在相邻列中显示单独表的查询?

我有两个表 - 一个标题为“计划约束”的表,其中包含“sot_allowed”时间间隔,另一个标题为“计划”,其中包含“sot_contribution”时间间隔。

以下是两个表的架构(为便于阅读而进行了编辑):

                         Table "public.planning_constraints"
   Column    |           Type           |          Modifiers  
-------------+--------------------------+-------------------------------
 start_time  | timestamp with time zone | 
 end_time    | timestamp with time zone | 
 sot_allowed | interval                 | 

                         Table "public.planning"
      Column      |           Type           |         Modifiers          
------------------+--------------------------+----------------------------
 start_time       | timestamp with time zone | 
 end_time         | timestamp with time zone | 
 sot_contribution | interval                 | 
Run Code Online (Sandbox Code Playgroud)

我可以分别查询它们并生成我想要的总数。“planning_constraints”表的查询是:

SELECT
  date_trunc('day', start_time - INTERVAL '18 hours')::date AS planning_day,
  sum(sot_allowed) AS minutes_allowed
FROM planning_constraints
WHERE start_time>='2016-11-26 18:00:00+00' AND start_time<'2016-12-03 18:00:00+00' AND comment like …
Run Code Online (Sandbox Code Playgroud)

postgresql join datetime sum coalesce

5
推荐指数
1
解决办法
108
查看次数

如何在不使用 DISTINCT 的情况下识别无法重写为 JOIN 的相关子查询?

我对 SQL 查询调优相当陌生。我一直在尝试了解如何编写等效的查询。在浏览J. Widom 教授的斯坦福在线视频讲座时,她提到了一些子查询,如果不JOIN使用DISTINCT. 例如,看这个:

  1. 4:45 / 20:13 - GPA 示例

    SELECT GPA
    FROM Student
    WHERE sID in (select sID from Apply where major = 'CS');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 6:39 / 20:13 - 学生申请 CS 而不是 EE

    SELECT sID, sName
    FROM Student
    WHERE sID IN (select sID from Apply where major = 'CS')
      AND sID NOT IN (select sID from Apply where major = 'EE');
    
    Run Code Online (Sandbox Code Playgroud)

我的问题是如何知道使用子查询编写的 SQL 语句是否将具有使用连接编写的等效语句。我很舒服,如果在答案中,有人喜欢使用关系代数表示法。

我在网上搜索了很多,找不到合适的答案。

样本数据

Schema 和表创建(对于 PostgreSQL)如下,

CREATE TEMP TABLE college …
Run Code Online (Sandbox Code Playgroud)

join subquery

5
推荐指数
1
解决办法
621
查看次数

SQL Server OR 运算符导致大量循环连接

下面的查询非常慢(运行超过一分钟),我已将问题缩小到OR操作员 ( ...OR (EXISTS (SELECT...)。

我使用实时执行来验证 OR 语句的表之间是否存在嵌套循环连接,然后将记录连接回EmailTable执行计划中的 。

基本上,EmailTable正在被探查两次。

如果我添加提示OPTION (MERGE JOIN),查询将在一秒钟内完成。

请告诉我如何重写此查询,以便优化器默认选择更好的计划。

EmailTable并且TeamMembers在 上有聚集索引INS_ID。表上的统计数据经常更新。

DECLARE @a INT
    ,@b BIT
    ,@c INT
    ,@d INT
    ,@e INT;

SELECT [XYZ].[CNT] AS [C]
FROM (
    SELECT COUNT(1) AS [CNT]
    FROM [dbo].[EmailTable] AS [table1]
    WHERE ([table1].[INS_ID] = @a)
        AND ([table1].[ACTIVE] = 1)
        AND ([table1].[QUEUED_TO_SEND] = @b)
        AND ([table1].[OWNER_USER_ID] <> @c)
        AND (
            ([table1].[OWNER_USER_ID] IN (- 1))
            OR (N'Allusers' = …
Run Code Online (Sandbox Code Playgroud)

performance join sql-server optimization exists query-performance

5
推荐指数
1
解决办法
380
查看次数

当前行日期过去 12 个月的总销售额

我需要根据给定月份的每一行计算给定 client_id 的过去 12 个月的销售额总和。

这是按客户按月汇总的销售额的初始表(此处针对特定客户进行过滤511656A75):

CREATE TEMP TABLE foo AS
SELECT idclient, month_transac, sales
FROM ( VALUES
  ( '511656A75', '2010-06-01',  68.57 ),
  ( '511656A75', '2010-07-01',  88.63 ),
  ( '511656A75', '2010-08-01',  94.91 ),
  ( '511656A75', '2010-09-01',  70.66 ),
  ( '511656A75', '2010-10-01',  28.84 ),
  ( '511656A75', '2015-10-01',  85.00 ),
  ( '511656A75', '2015-12-01', 114.42 ),
  ( '511656A75', '2016-01-01', 137.08 ),
  ( '511656A75', '2016-03-01', 172.92 ),
  ( '511656A75', '2016-04-01', 125.00 ),
  ( '511656A75', '2016-05-01', 127.08 ),
  ( '511656A75', '2016-06-01', 104.17 ), …
Run Code Online (Sandbox Code Playgroud)

postgresql performance join optimization postgresql-9.6 query-performance

5
推荐指数
1
解决办法
4556
查看次数

为什么这种隐式连接的规划方式与显式连接不同?

在这个答案中,我解释了 SQL-89 的隐式语法。
但是我在玩的时候注意到不同的查询计划:

EXPLAIN ANALYZE
  SELECT *
  FROM (values(1)) AS t(x), (values(2)) AS g(y);

                                     QUERY PLAN                                     
------------------------------------------------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.002..0.002 rows=1 loops=1)
 Planning time: 0.052 ms
 Execution time: 0.020 ms
(3 rows)
Run Code Online (Sandbox Code Playgroud)

与此相反:

EXPLAIN ANALYZE
  SELECT *
  FROM (values(1)) AS t(x)                      
  CROSS JOIN (values(2)) AS g(y);
                                           QUERY PLAN                                           
------------------------------------------------------------------------------------------------
 Subquery Scan on g  (cost=0.00..0.02 rows=1 width=4) (actual time=0.004..0.005 rows=1 loops=1)
   ->  Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.002..0.002 rows=1 loops=1)
 Planning time: 0.075 ms
 Execution time: 0.027 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance join execution-plan postgresql-9.5 postgresql-performance

5
推荐指数
1
解决办法
1270
查看次数

为什么优化器在这里选择嵌套循环而不是合并连接?

我有3张桌子。#a是一个主表和两个辅助表,#b并且#c.

create table #a (a int not null, primary key (a asc)) ;
create table #b (b int not null, primary key (b asc)) ;
create table #c (c int not null, primary key (c asc)) ;

insert into #a (a)
select x*10 + y
from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9))x(x)
cross join (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9))y(y) ;

insert into #b (b)
select a from #a where a % 5 > 0 ;

insert into #c (c)
select a from #a …
Run Code Online (Sandbox Code Playgroud)

join sql-server optimization database-internals

5
推荐指数
1
解决办法
5191
查看次数

同一个表中的父子关系

我有一个存储父/子记录的表,如下所示:

+-------+------------+---------+---------+------------+-----------+
|custid | custname   | deptid  | company |parentcustid| enrolled  |
+=======+============+=========+=========+============+===========+
| 7060  | Sally      |   AB1   | comp1   |  null      |     1     |
| 6953  | Ajit       |   AB7   | comp2   |  7060      |     1     |
| 6957  | Rahul      |   DE1   | comp3   |  7060      |     1     |
| 6958  | uday       |   TG6   | comp4   |  7060      |     1     |
| 6959  | john       |   HY7   | comp5   |  7060      |     1     |
| 6960 …
Run Code Online (Sandbox Code Playgroud)

join sql-server hierarchy

5
推荐指数
2
解决办法
4万
查看次数

Postgres JOIN 奇怪的行为

我刚刚开始学习 Postgres,我遇到的情况是,根据我在表上执行 JOIN 的方式,性能和计划输出似乎真的很奇怪。

这些是与其索引一起使用的表:

create table escola
(
    pk_codigo integer not null
        constraint pk_escola
            primary key,
    nome varchar(100),
    municipio varchar(150),
    uf char(2),
    cod_municipio integer,
    uf_id integer default 0 not null
        constraint fk_escola_uf_id
            references tb_uf
)
;

create index idx_escola_uf
    on escola (uf)
;

create index idx_escola_uf_id
    on escola (uf_id)
;

create index idx_multi_escola_uf_pk
    on escola (uf, pk_codigo)
;

create table if not exists candidato
(
    pk_numero_inscricao bigint not null
        constraint candidato_pk
            primary key,
    cod_municipio_residencia integer,
    municipio_residencia varchar(150),
    uf_residencia char(2), …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index join postgresql-performance

5
推荐指数
1
解决办法
221
查看次数

PostgreSQL 更新加入与 SQL Server 更新加入

我最近开始将个人项目从 Microsoft SQL Server 转换为 PostgreSQL,我对UPDATE JOIN在两个表之间执行时遇到的糟糕性能感到惊讶。

假设它们看起来像:

CREATE TABLE foo (
  id INTEGER NOT NULL PRIMARY KEY,
  bar INTEGER NULL
);

CREATE TABLE foo2 (
  id INTEGER NOT NULL PRIMARY KEY,
  bar INTEGER NULL
);
Run Code Online (Sandbox Code Playgroud)

在 T-SQL 中,我会使用这样的连接来进行更新:

UPDATE foo
SET bar = t2.bar
FROM foo t1
JOIN foo2 t2
ON t1.id = t2.id;
Run Code Online (Sandbox Code Playgroud)

但是在 Postgres 中运行,查询速度非常慢。

如果我将其更改为:

UPDATE foo
SET bar = t2.bar
FROM foo2 t2
WHERE foo.id = t2.id;
Run Code Online (Sandbox Code Playgroud)

这不是问题。

我知道语法是不同的,但我希望查询优化器能在同一个球场上解决一些问题。相反,事情变得疯狂。除了语法差异之外,我看不到的两个查询之间是否存在细微差别?

解释计划

Update on foo …
Run Code Online (Sandbox Code Playgroud)

postgresql join sql-server update

5
推荐指数
1
解决办法
438
查看次数