标签: syntax

SQL 中 USING 参数的用途是什么?

在标准 MySQL 数据库上使用一些代码,我遇到了以下语句:

SELECT * FROM foo LEFT JOIN bar USING ('bar_id') WHERE foo_id = 1
Run Code Online (Sandbox Code Playgroud)

让我困惑的是:USING它是为了什么,它有什么作用?

我的第一个假设是它涉及使用外键或可能的索引,但 DB 模式没有任何外键或索引的指示,期间。
我的 googlefu 使我失败了,可能是因为USING在网站上的大多数文本中都是如此常见的词。因此,我想知道在我修改此代码和此代码中的多个其他查询之前,DB 专家听到的是否可以阐明它的作用。

mysql syntax

7
推荐指数
2
解决办法
631
查看次数

在单个结果中连接一对多字段?

假设我有以下查询:

SELECT * 
FROM AppDetails, AppTags 
WHERE AppDetails.AppID = '1' 
  AND AppDetails.AppID = AppTags.AppID
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

AppID    AppName        AppType    Tag
1        Application1   Utility    Test1
1        Application1   Utility    Test2
1        Application1   Utility    Test3
Run Code Online (Sandbox Code Playgroud)

如何修改查询以返回如下内容:

AppID    AppName        AppType    Tags
1        Application1   Utility    Test1,Test2,Test3
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 join syntax group-concatenation

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

视图设计器奇怪的连接语法

我有一个数据仓库,里面有很多用 SSMS 视图设计器内置的视图。查看语法,FROM我无法理解这些子句,因为ON语句没有紧跟在相关的JOIN <table>. 通常RIGHT连接查询的主表并在FROM. 所以我有这样的情况:

SELECT *
FROM tableC
LEFT JOIN TableB
RIGHT JOIN TableA
ON TableA.ID = TableB.ID
ON TableB.TypeID = TableC.TypeID 
WHERE ....
Run Code Online (Sandbox Code Playgroud)

将各种JOINandON子句的顺序更改为我手写的内容会以意想不到的方式改变结果。似乎大多数 SQL 美化者都对这种丑陋的语法感到窒息,而 SSMS 则不然。我一直无法找到押韵、原因或文档来帮助解开正在发生的事情。

请提供任何建议或链接以找出和修复视图设计器查询?

sql-server syntax ssms t-sql view

7
推荐指数
1
解决办法
377
查看次数

是否有用于 SQL-Server 的工具来帮助添加分号?

早期版本的 SQL-Server 不推荐使用分号来终止 sql 语句。

从 sql-server-2008 示例开始,现在 Microsoft 建议以分号结尾。

有一些格式化工具可以格式化 sql 查询并添加分号。我认为基本功能在 SMO 的某个地方。

唯一的问题是这些工具会删除所有注释。

任何想法如何保留所有评论以及如何添加所有推荐分号?

sql-server-2008 syntax

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

检测是否在数值中设置了位

我有一个表示一组标志的 tinyint 列。假设我想知道是否设置了特定位,我如何在存储过程中执行按位 AND/OR 操作?

sql-server stored-procedures syntax

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

有没有办法部分初始化 TYPE?

我创建了一个自定义类型:

CREATE TYPE my_type as(name text, street text, location text);
Run Code Online (Sandbox Code Playgroud)

初始化这样的类型很容易:

SELECT ROW('a', 'b', 'c')::my_type;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以部分初始化类型,这意味着所有未提及的列都隐式设置为 null。在伪代码中,类似于:

SELECT ROW('a', 'c')::my_type(name, location);
Run Code Online (Sandbox Code Playgroud)

另外,当列未按正确顺序提及时,是否还有一种初始化类型的方法?在伪代码中,类似于:

SELECT ROW('c', 'a', 'b')::my_type(location, name, street);
Run Code Online (Sandbox Code Playgroud)

postgresql syntax datatypes cast composite-types

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

不熟悉的语法 - 在开始时使用大括号中的参数进行查询

我已使用以下语法在我们的一台服务器上运行sp_WhoIsActive

sp_whoisactive @get_plans = 1, @show_sleeping_spids = 0, @get_outer_command = 1, @get_locks = 1
Run Code Online (Sandbox Code Playgroud)

并用sql_command(显示的列@get_outer_command设置为1)找到了一个spid,如下所示

(@p1 int,@p2 int)
Exec MyDatabase.MyProc @p1 @p2
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的测试 Adventureworks 数据库上使用此语法运行查询时:

(@be int)
SELECT  *
FROM    Person.Person
WHERE   BusinessEntityID = @be
Run Code Online (Sandbox Code Playgroud)

我收到错误

消息 1050,级别 15,状态 1,第 1 行 此语法仅适用于参数化查询。消息 137,级别 15,状态 2,第 4 行 必须声明标量变量“@FN”。

所以这似乎与参数化查询有关。这是有道理的,因为变量 @be 永远不会被设置为一个值

这里发生了什么?

sql-server syntax parameter sql-server-2016 sp-whoisactive

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

`TABLE example` 语法叫什么?

在 PostgreSQL 中,我一直在使用类似的语法

TABLE example1
UNION ALL
TABLE example2
Run Code Online (Sandbox Code Playgroud)

我理解这相当于

SELECT * FROM example1
UNION ALL
SELECT * FROM example2
Run Code Online (Sandbox Code Playgroud)

但是一位同事问了我这个问题,我找不到任何关于这个语法的 PostgreSQL 文档。(“TABLE”不是一个有用的搜索短语。)我在哪里可以找到有关它的文档?

它是 ANSI SQL 标准吗?


编辑:它目前显然甚至混淆了 StackExchanges 的语法突出显示。

postgresql syntax

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

用于仅更新 UPSERT 中更改的行的语法简写

我有一个查询,当一个键冲突时,只有在其他列之一发生更改时才会向上插入 Postgres(以避免不必要的插入和返回的行,但实际上没有任何更改):

INSERT INTO public.test_upsert (some_id, a, b, note) 
VALUES 
  ('c', 1, true, 'asdf')
ON CONFLICT (some_id)
DO UPDATE SET 
  a = excluded.a, 
  b = excluded.b, 
  note = excluded.note 
WHERE
  test_upsert.a IS DISTINCT FROM excluded.a OR 
  test_upsert.b IS DISTINCT FROM excluded.b OR
  test_upsert.note IS DISTINCT FROM excluded.note
RETURNING *;
Run Code Online (Sandbox Code Playgroud)

我的问题是:这个有简写吗?我基本上想在插入的任何列与现有列不同时插入新记录更新行。单独写出每一列会变得非常冗长,尽管它更明确。

postgresql syntax update upsert

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

为什么根据 SQL-92,未加引号的标识符是大写的?

SQL-92 标准的第 5.6 节包含规则 10...13,其中未加引号的标识符应大写,因此foo变为FOO"foo"仍然是foo

例如,Oracle、IBM DB2、SnowflakeksqlDB遵守这些规则,但Postgres 、MySQL 或 SQLite 则不遵守这些规则。

问题是,为什么?根据我的理解,在具有大量关键字的语言中可选地引用标识符是有意义的。标识符一致的区分大小写或不区分大小写也是有意义的。但让它依赖于被引用的标识符看起来并不合理。

我缺少什么?

syntax sql-standard case-sensitive quoted-identifier

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