我有以下架构:
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) 我在 SQL Server 数据库中有两张表,一张有两列,一张有四列:
tbl_email_list
email_list_id int (PK)email_list_name varchartbl_email-details
email_uniq_id int (PK)email_list_id int (FK)email_address varcharblacklist bit我想在一个应该返回的查询中检索数据
我找到了一个查询,可以从 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 初学者,请帮忙!
我有一个关于查询分解和本地化的问题,如下所示:
加入 3 个表时(这里EMP,ASG和PROJ)有什么特定的顺序,什么时候加入哪个表?
为什么ASG和EMP首先加入,然后“结果”加入PROJ?
是否可以不并行连接所有 3 个表:
我有一张桌子[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) 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 任何帮助将不胜感激
在 SQL Server 中工作,假设我有一个包含两个表的数据库:events和competitors.
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 语句来完成?我的下一个想法是触发器。
我正在尝试获得一个快速、简单的 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 的错误用法
我最近开始将个人项目从 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) join ×10
sql-server ×5
mysql ×3
postgresql ×2
update ×2
cast ×1
count ×1
group-by ×1
limits ×1
optimization ×1
performance ×1