标签: sql

在多列上使用group by

我明白了这一点 GROUP BY x

但是如何GROUP BY x, y工作,这是什么意思?

sql group-by

962
推荐指数
2
解决办法
98万
查看次数

JOIN和INNER JOIN之间的区别

这两个连接都会给我相同的结果:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)

VS

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)

表现或其他方面的陈述是否有任何区别?

不同的SQL实现之间是否有所不同?

sql sql-server join inner-join

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

INNER JOIN ON vs WHERE子句

为简单起见,假设所有相关字段都是NOT NULL.

你可以做:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1, table2
WHERE
    table1.foreignkey = table2.primarykey
    AND (some other conditions)
Run Code Online (Sandbox Code Playgroud)

要不然:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1 INNER JOIN table2
    ON table1.foreignkey = table2.primarykey
WHERE
    (some other conditions)
Run Code Online (Sandbox Code Playgroud)

这两个是以同样的方式工作MySQL吗?

mysql sql join inner-join

893
推荐指数
9
解决办法
57万
查看次数

什么时候应该使用交叉申请而不是内部联接?

使用CROSS APPLY的主要目的是什么?

我已经阅读(模糊地,通过互联网上的帖子),cross apply如果你正在进行分区,那么在选择大型数据集时可以更有效率.(寻找灵感)

我也知道CROSS APPLY 不需要UDF作为右表.

在大多数INNER JOIN查询(一对多关系)中,我可以重写它们以供使用CROSS APPLY,但它们总是给我相同的执行计划.

任何人都可以给我一个很好的例子,告诉我什么时候能有效的CROSS APPLY情况INNER JOIN


编辑:

这是一个简单的例子,执行计划完全相同.(告诉我一个他们不同的地方,哪里cross apply更快/更有效率)

create table Company (
    companyId int identity(1,1)
,   companyName varchar(100)
,   zipcode varchar(10) 
,   constraint PK_Company primary key (companyId)
)
GO

create table Person (
    personId int identity(1,1)
,   personName varchar(100)
,   companyId int
,   constraint FK_Person_CompanyId foreign key (companyId) references dbo.Company(companyId)
,   constraint PK_Person primary key (personId)
) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server performance cross-apply

890
推荐指数
11
解决办法
68万
查看次数

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数

基于ID匹配从一个表到另一个表的SQL更新

我有一个带account numbers和的数据库card numbers.我将这些文件与update任何卡号匹配到帐号,以便我只使用帐号.

我创建了一个视图链接表和帐户/卡数据库以返回Table ID相关的帐号,现在我需要更新ID与帐号匹配的记录.

这是Sales_Import表,account number需要更新字段:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039
Run Code Online (Sandbox Code Playgroud)

这是RetrieveAccountNumber表,我需要更新:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039
Run Code Online (Sandbox Code Playgroud)

我试过以下,但到目前为止没有运气:

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID = 
                                                RetrieveAccountNumber.LeadID) 
Run Code Online (Sandbox Code Playgroud)

它将卡号更新为帐号,但帐号被替换为 NULL

sql sql-server select join sql-update

885
推荐指数
18
解决办法
167万
查看次数

如何在SQL Server中转义单引号?

我正在尝试将insert一些文本数据放入SQL Server9中的表中.

该文本包括单引号(').

我怎么逃避?

我尝试使用两个单引号,但它给我一些错误.

例如. insert into my_table values('hi, my name''s tim.');

sql t-sql sql-server delimiter single-quotes

882
推荐指数
7
解决办法
103万
查看次数

将PostgreSQL的PL/pgSQL输出保存为CSV文件

将PL/pgSQL输出从PostgreSQL数据库保存到CSV文件的最简单方法是什么?

我正在使用PostgreSQL 8.4和pgAdmin III以及PSQL插件来运行查询.

sql csv postgresql postgresql-copy

853
推荐指数
15
解决办法
63万
查看次数

插入MySQL表或更新(如果存在)

我想在数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行.

例如,

insert into table (id, name, age) values(1, "A", 19)
Run Code Online (Sandbox Code Playgroud)

假设唯一的密钥是id,在我的数据库中有一行id = 1.在这种情况下,我想用这些值更新该行.通常这会产生错误.如果我使用insert IGNORE它将忽略错误,但它仍然不会更新.

mysql sql upsert insert-update

821
推荐指数
12
解决办法
78万
查看次数

SQL Server中的函数与存储过程

我一直在学习函数和存储过程很长一段时间,但我不知道为什么以及何时应该使用函数或存储过程.他们看起来和我一样,也许是因为我对此有点新手.

有人可以告诉我为什么吗?

sql t-sql sql-server stored-procedures sql-function

801
推荐指数
13
解决办法
64万
查看次数