问题标签 [ansi-sql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 查询与自身连接的表
今天我有期末考试。我很高兴地批准了 :D 但其中一个问题真的让我大吃一惊。
我需要帮助,这样我才能安息。
问题
我们有一张“人”表
这只是数据的一个例子。这个表与它本身有关系,在表fatherId(FK)和表id(PK)上我需要做一个查询,显示2列,一列是人名,另一列是他/她的表弟.
很简单,直到这里,对吧?问题是我有一些限制
- 仅允许使用 ANSI。没有 T-sql,或另一个。此外,ANSI 99 标准,不是 2003 或更高版本
- 不允许子查询。最糟糕的是:
- 没有关系重复。
例如,考虑到在这个例子中,gon 和 maria 是表亲。如果我显示,gon | maria
在结果中,我不能显示maria | gon
.
那么,我该怎么做呢?真是烧我的头。
我试过什么?
好吧,最大的问题是最后一个必要条件,即数据的重复。忽略这一点,我把它放在我的考试中(知道是错的..)
当然,这并不能解决最后一个要求,我的测试中有一个 4(我们以 4 通过),但无论如何,我的头都在燃烧。所以,请帮助我!
探索了另一种选择
我的一位朋友也参加了同样的考试,他说我
“好吧,考虑到每个关系都是重复的,我可以使用 top count(*) 和 order by 并得到一半正确”
但是..Top
不是ANSI
!
sql - ANSI SQL:2008:TRUNCATE 或 TRUNC 是 SQL 函数吗?
ANSI SQL:2008:TRUNCATE 或 TRUNC 是 SQL 函数吗?我在哪里可以找到 ANSI SQL:2008?
sql - 如何使用标准 SQL 连接用逗号分隔的行?
假设我们有一个表 T1 和一个表 T2。T1 和 T2 之间存在 1:n 的关系。我想选择所有 T1 及其所有 T2,每一行对应于 T1 记录,并连接 T2 值,仅使用 SQL 标准操作。
示例:T1 = 人 T2 = 受欢迎程度(按年份)
每一年一个人都有一定的人气
我想使用 SQL 标准操作编写一个选择,结果如下:
其中 John Smith 的流行度表中有 3 条记录,John Doe 没有一条记录,Jane Smith 有一条记录,它们的值是上面表示的值。这可能吗?如何?
我正在使用 Oracle,但只想使用标准 SQL 来执行此操作。
mysql - 使用变量在 MySQL 中模拟 MS SQL Server ROW_NUMBER() 功能的可靠性和 ANSI-SQL 合规性?
正如本论坛其他地方(例如此处)所讨论的,可以使用 MySQL 中的变量来模拟 MS SQL Server 中的(按...排序...分区)功能的 row_number()。例如,这样的代码:
可以像这样在 MySQL 中实现:
虽然这相当快(因为它避免了自连接),但我犹豫是否将其投入生产,因为它对可能可移植或不可移植的查询执行计划做出了详细假设。特别是,它假设:
1)表'b'的行由外部查询按其排序顺序处理,
2)外部查询的列从左到右计算(即rowNum -> col1 -> col2。
这些假设似乎打破了我习惯的 SQL 语法的通常抽象。此外,此查询要求程序员确保他/她为 col1 和 col2 提供的初始值不存在于 Table1 中。同样,在我看来,这是一个糟糕的设计。这给我带来了一个相关的问题,后一种形式(使用变量)是否符合 ANSI SQL(92 或 99),还是 MySQL 的一个特性?确定给定语法是否符合 ANSI SQL 的明确来源是什么?您是否愿意将第二个版本投入生产?
sql-server - 为什么警告 COUNT(col) 中的 NULL?
这是一个哲学问题,我猜...
假设我在 SQL Server 中执行此查询:
计数列包含 NULL 并且 ANSI_WARNINGS 选项为 ON,所以我得到:
警告:空值被聚合或其他 SET 操作消除。
我明白这意味着什么。并且有很多方法可以“修复”这个警告。但是......为什么它首先抱怨?
跳过任何 NULL 就可以了COUNT(mycolumn)
!如果我想计算所有行,包括该列的 NULL,我会使用COUNT(*)
. 我的意图是跳过 NULL ,这不是很清楚吗?
我猜 ANSI 标准需要这个警告,即使在这种明显的情况下也是如此。为什么?
mysql - SQL:我们需要 ANY/SOME 和 ALL 关键字吗?
我使用 SQL(SQL Server、PostgreSQL)已有 10 多年了,但我仍然从未在我的生产代码中使用过关键字ANY/SOME
。ALL
我遇到的所有情况都可以使用IN
, MAX
, MIN
, EXISTS
, 并且我认为它更具可读性。
例如:
或者
使用ANY/SOME
和ALL
:
所以问题是:我错过了什么吗?是否存在某些情况ANY/SOME
并ALL
超越其他解决方案?
sql - CREATE DATABASE 会覆盖吗?
我正在编写一个简单的 SQL 脚本,如果它不存在,则需要创建一个新数据库,或者如果它已经存在,则单独保留该数据库(而不是覆盖它或 drop-n-swap 它的表)。
我需要它符合 ANSI;根据W3 学校:
...符合 ANSI 标准。my_db
但是如果已经存在,它没有任何地方说明它的行为是什么。
所以我问:我如何编写符合 ANSI 的 SQL,my_db
如果它不存在则创建,或者如果它已经存在则不对其做任何事情?提前致谢!
sql - 使用 SQL Server 2008 时以 ANSI 输出
我必须通过 BAtch 文件在 SQL Server 中运行选择查询,并且输出需要采用 ANSI 格式。每当我运行时,输出似乎都是 Unicode。后继作业使用 exe 文件,查询的输出用作输入。
我知道右键单击并另存为选项,但我不确定如何修改它的代码。任何帮助将不胜感激
sql - Postgres 下/上一行 SQL 查询
我在 Postgres 9.1 数据库中有以下表结构,但如果可能的话,理想的解决方案应该与数据库无关:
我有一个查询(对于视图),它提供了下一个和上一个 item.id。
例如
我可以使用以下查询来做到这一点:
您能否帮助解决以下问题:
1)有没有办法让 ids 换行,即
- nextitemid 列最后一行的 NULL itemid 应该是 1
- previtemid 列第一行中的 NULL itemid 应为 9
2) 是否有一种高效的方法可以按用户 ID 对下一个和上一个 itemid 进行分组,例如
注意:在此示例中,用户的 itemid 是连续的,实际数据并非如此,每个用户的 itemid 是交错的。
mysql - 列的 SQL 约束
我有一个名为 NumberInStock 的列。但是,在数据库中,我想将可以输入到该列中的值限制在 1 到 100 之间。我将在该列上使用什么约束,这将是 SQL 查询的正确语法吗?到目前为止我得到的是:
现在我在这之后放什么来放置约束以及我将使用什么约束
我正在使用具有 1999 ANSI/ISO 标准的 MySQL。