标签: join

如何选择多个 COUNT(*) 列,每个 GROUP BY 都有不同的 WHERE 子句?

我有以下架构:

CREATE TABLE Person (
  PersonId int PRIMARY KEY
)

CREATE TABLE Action (
  ActionId int PRIMARY KEY,
  PersonId int NOT NULL FOREIGN KEY REFERENCES Person(PersonId),
  ActionTime datetime NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

以及以下数据:

INSERT INTO Person (PersonId) VALUES
(1),
(2),
(3),
(4)

INSERT INTO Action (ActionId, PersonId, ActionTime) VALUES
(1, 1, '2014-02-01'),
(2, 1, '2014-02-02'),
(3, 2, '2014-02-02'),
(4, 3, '2014-03-05')
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询,显示每个人在每个月的 15 日之间执行的操作数。例如,我正在尝试以下操作:

SELECT
    Person.PersonId,
    COALESCE(GroupA_Actions_Made, 0) AS GroupA_Actions_Made,
    COALESCE(GroupB_Actions_Made, 0) AS GroupB_Actions_Made
FROM
    Person
    RIGHT OUTER JOIN (
        SELECT …
Run Code Online (Sandbox Code Playgroud)

join sql-server-2008-r2 group-by

6
推荐指数
1
解决办法
3万
查看次数

连接两个表并在单个查询中返回数据和计数

我在 SQL Server 数据库中有两张表,一张有两列,一张有四列:

  1. tbl_email_list

    1. email_list_id int (PK)
    2. email_list_name varchar
  2. tbl_email-details

    1. email_uniq_id int (PK)
    2. email_list_id int (FK)
    3. email_address varchar
    4. blacklist bit

我想在一个应该返回的查询中检索数据

  1. 来自 tbl_email_list 的所有电子邮件列表;
  2. 与特定 email_list_id 关联的 email_address 总数;
  3. 列入白名单的电子邮件地址总数(其中黑名单=0);
  4. 列入黑名单的电子邮件地址总数(其中 blacklist=1)。

join sql-server count

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

如何在SQL中找到第n个最高薪水?

我找到了一个查询,可以从 Employee 表中找到第 n 个最高工资,但我不明白 (N-1) 的逻辑?

EmpID         Salary
1             90000
2             80000
3             54000
4             37000
5             12000
6             69000
7             50000

SELECT * FROM Employee E1
WHERE (N-1) = (
                SELECT COUNT(DISTINCT(E2.Salary))
                FROM Employee E2
                WHERE E2.Salary > E1.Salary
              )
Run Code Online (Sandbox Code Playgroud)

如果 N=4,那么查询是如何工作的?我是一个完整的 SQL 初学者,请帮忙!

mysql join sql-server

6
推荐指数
3
解决办法
2万
查看次数

加入查询分解

我有一个关于查询分解和本地化的问题,如下所示:

在此处输入图片说明

加入 3 个表时(这里EMP,ASGPROJ)有什么特定的顺序,什么时候加入哪个表?
为什么ASGEMP首先加入,然后“结果”加入PROJ

是否可以不并行连接所有 3 个表:

在此处输入图片说明

将下面也有可能(只是切换的顺序PROJEMP): 在此处输入图片说明

performance join optimization query-performance

6
推荐指数
1
解决办法
553
查看次数

在 SQL Server 中使用逗号分隔值连接

我有一张桌子[CourseMaster]喜欢

CourseId    CourseName
-----------------------
  01          ABC
  02          DEF
  03          GHI
  04          JKL
  05          MNO
  06          PQR
  07          STU
Run Code Online (Sandbox Code Playgroud)

我还有一张[StudentMaster]学生详细信息表,比如

ROLLNO  NAME    ADDRESS          Course
------------------------------------------------
12345   RAM     RAM ADDRESS      01,02,06                      
25695   HARI    HARI ADDRESS     02,06                         
89685   JEFF    JEFF ADDRESS     03,05,06,07                   
47896   DAISY   DAISY ADDRESS    03         
Run Code Online (Sandbox Code Playgroud)

在这里,我想使用CourseName(Not CourseId)获取学生详细信息。

如果中的值Course不是逗号分隔的,那么query使用 join 获取详细信息将非常简单。

据我所知,我可以queries为我想要的相同结果运行两个查询,一个查询用于从[StudentMaster]前端获取学生的详细信息。另一个用于仅通过相应的循环获取CourseNamefrom 。[CourseMaster]CourseId

但事实上我只想要一个结果,query而不是queries为这个小任务写两个。

我想这是100%可能的。我的预期结果如下:

ROLLNO  NAME    ADDRESS         Course …
Run Code Online (Sandbox Code Playgroud)

join sql-server

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

Postgresql 加入删除

我刚刚观看了 Rob Farley “为简化设计”的非常有趣的视频,我想知道视频中给出的 4 条规则是否也适用于 PostgreSQL。

如果视图正在执行不执行的连接:

  • 添加任何列
  • 消除行
  • 重复行
  • 引入空值

对于不需要它们的查询,连接是否会被忽略。或者它只是一个 SQL Server 的东西?

postgresql join

6
推荐指数
1
解决办法
302
查看次数

我可以生成两列之间所有组合的列表吗

table 1
|id|name  |
------------
|1 |Bob   |
|2 |Frank |
|3 |Paula |

Table 2
|id|item|
---------
|1 |a   |
|2 |b   |
|3 |c   |
Run Code Online (Sandbox Code Playgroud)

我需要编写一个查询来显示两个表的所有组合,如下所示:

result
|name|item|
-----------
|bob |a   |
|bob |b   |
|bob |c   |
etc
Run Code Online (Sandbox Code Playgroud)

我目前正在使用 mysql 任何帮助将不胜感激

mysql join

6
推荐指数
1
解决办法
8871
查看次数

您可以在默认约束中使用插入的变量吗

在 SQL Server 中工作,假设我有一个包含两个表的数据库:eventscompetitors.

events 有以下列:

[event_id] [event_name] [winner_id] [loser_id]
Run Code Online (Sandbox Code Playgroud)

competitors 有以下列:

[comp_id] [comp_name]
Run Code Online (Sandbox Code Playgroud)

我想添加一个默认约束以[event_name]在插入新事件时节省我的时间。类似于:

ALTER TABLE [events]
ADD CONSTRAINT DF_event_name
DEFAULT CAST([winner_id] AS varchar(10)) + ' vs ' + CAST([loser_id] AS varchar(10)) FOR [event_name]
Run Code Online (Sandbox Code Playgroud)

当然,这是一个简化版本,它还需要使用competitors ON comp_id = winner_id and comp_id = loser_id.

当我尝试设置上述默认约束时,我得到了您可能期望的响应:

在此上下文中不允许使用名称“winner_id”。有效的表达式是常量、常量表达式和(在某些上下文中)变量。不允许使用列名。

那么有什么办法可以解决我想要做的事情吗?
有没有办法自动将单元格的值设置为实现从同一行插入的数据的字符串?如果可能的话,是否也可以使用 join 语句来完成?我的下一个想法是触发器。

join sql-server default-value cast

6
推荐指数
1
解决办法
1084
查看次数

UPDATE 只有一行(使用更新和连接)

我正在尝试获得一个快速、简单的 sql 查询,以便在使用 join 时一次只更新一行。

我试过了LIMIT,但没有成功。

询问:

UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET 
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

信息:

错误代码:1221. UPDATE 和 LIMIT 的错误用法

mysql join update limits

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

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
查看次数