我有一个查询,如:
SELECT a.id, a.name, json_agg(b.*) as "item"
FROM a
JOIN b ON b.item_id = a.id
GROUP BY a.id, a.name;
Run Code Online (Sandbox Code Playgroud)
如何选择在列b,所以我没有b.item_id在JSON对象?
我读过关于ROW,但它返回一个 JSON 对象,如:
{"f1": "Foo", "f2": "Bar"}
Run Code Online (Sandbox Code Playgroud)
一旦获取它以匹配正确的列键,我将需要重新映射 JSON 对象。我想避免这种情况并保留原始列名。
我正在运行 postgresql 9.3.4。我有一个包含 3 个字段的表:
id name addr
--- ---- ----
1 n1 ad1
2 n2 ad2
...
Run Code Online (Sandbox Code Playgroud)
我需要将数据移动到包含以下字段的新表:
id data
--- ----
1 {'name': 'n1', 'addr': 'ad1'}
2 {'name': 'n2', 'addr': 'ad2'}
...
Run Code Online (Sandbox Code Playgroud)
row_to_json对我来说不是解决方案,因为它也SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t增加id了结果。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?
我的 SQL Server 数据库中有一个配置表,该表应该只有一行。为了帮助未来的开发人员理解这一点,我想防止添加多于一行的数据。我选择为此使用触发器,如下所示......
ALTER TRIGGER OnlyOneConfigRow
ON [dbo].[Configuration]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @HasZeroRows BIT;
SELECT @HasZeroRows = CASE
WHEN COUNT (Id) = 0 THEN 1
ELSE 0
END
FROM
[dbo].[Configuration];
IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
BEGIN
RAISERROR ('You should not add more than one row into the config table. ', 16, 1)
END
END
Run Code Online (Sandbox Code Playgroud)
这不会引发错误,但不允许第一行进入。
还有比这更有效/更自我解释的方法可以将可以插入表中的行数限制为 1 吗?我是否缺少任何内置的 SQL Server 功能?
大家好,感谢您的帮助。
我有以下情况:一个名为 statements 的表,其中包含字段id (int)、stmnt_date (date)、debit (double)、credit (double) 和balance (double)

我想按照以下规则计算余额:
第一行余额(按时间顺序)= 借方 - 贷方,其余行
当前行余额 = 按时间顺序前一行余额 + 当前行借方 - 当前行贷方
正如您在上面的图片中看到的,行不是按日期排列的,这就是为什么我按时间顺序使用这个词两次来强调 stmnt_date 值的重要性。
非常感谢您的帮助。
使用 Postgres:
SELECT users."name" AS "name"
, array_to_json(array_agg(sites)) as sites
FROM remodel.users AS users
JOIN remodel.user_sites AS user_sites
ON users.id=user_sites.user
JOIN remodel.sites AS sites
ON sites.id=user_sites.site
GROUP BY "users".id
;
Run Code Online (Sandbox Code Playgroud)
目前生产
SELECT users."name" AS "name"
, array_to_json(array_agg(sites)) as sites
FROM remodel.users AS users
JOIN remodel.user_sites AS user_sites
ON users.id=user_sites.user
JOIN remodel.sites AS sites
ON sites.id=user_sites.site
GROUP BY "users".id
;
Run Code Online (Sandbox Code Playgroud)
但是我不想在 JSON 输出中有“id”字段。
将站点选择更改为
array_to_json(array_agg(row(sites."name", sites.created))) as sites
Run Code Online (Sandbox Code Playgroud)
导致字段失去名称
"Toby";"[{"id":1,"name":"Village","created":"2015-08-10T15:22:36.622298"},
{"id":2,"name":"Manor","created":"2015-08-10T15:22:43.614551"}]"
"Amy";"[{"id":3,"name":"Park","created":"2015-08-10T15:22:48.810872"}]"
"Anne";"[{"id":2,"name":"Manor","created":"2015-08-10T15:22:43.614551"},
{"id":1,"name":"Village","created":"2015-08-10T15:22:36.622298"},
{"id":3,"name":"Park","created":"2015-08-10T15:22:48.810872"}]"
Run Code Online (Sandbox Code Playgroud)
并尝试(这将是一个可怕的)子选择
, array_to_json(array_agg((SELECT "name", created FROM …Run Code Online (Sandbox Code Playgroud) 下面是我正在使用的 MySQL 表布局。基本上,我想增加浏览量、观察者和查询,因为它们通过网站的前端发生。我的问题是如何在第一次访问 ID: 1106 或 1107 时使用 MySQL 插入创建一个新的 _views 行?
ID 键值 ----- ----- ------ 1104 _reserve 10000 1104 _views 100 第 1104 章 1104 _inquiries 1 1105 _reserve 1500 1106 _reserve 24000 第 1106 章 1107 _reserve 45300
ROWID仅插入表时假设顺序或升序有多安全?为什么?
我遇到过一种情况,我必须验证是否将新记录添加到没有用作参考的序列或日期列的表中。我发现ROWID最近添加的记录高于所有相关记录。因此我假设它们比参考记录更旧。然而,环顾网络,似乎有一些关于ROWID,有些甚至声称这ROWID甚至不能保证是恒定的!
我知道依赖ROWIDfor 顺序可能不是一个好主意,但这让我思考:在使用语句和仅插入时ROWID,关于值的顺序和变化提供了什么保证DELETE。oracle 有没有详细说明这些要点的官方文档?另外,ROWID在表级别或数据库级别是唯一的吗?
运行下面的命令,我得到“返回“记录”的函数需要一个列定义列表。
SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}');
ERROR: a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}');
Run Code Online (Sandbox Code Playgroud)
没关系。我知道它想要什么。
SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}')
AS (a int, b int, c int, d int);
Run Code Online (Sandbox Code Playgroud)
此外,在 PostgreSQL 中,所有表都已经有一个以相同名称创建的类型。
CREATE TABLE foo(a,b,c,d)
AS VALUES
(1,2,3,4);
Run Code Online (Sandbox Code Playgroud)
这将创建一个foo链接到新创建的 table的内部类型foo。不过,我可以很容易地创建一个类似的类型bar。
CREATE TYPE bar AS (a int, b int, c int, d int);
Run Code Online (Sandbox Code Playgroud)
能够将返回的记录转换json_to_record()为 bar会很棒。
SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}')
AS foo; -- bar? anything? …Run Code Online (Sandbox Code Playgroud) 我正在寻找最有效的方法来从表中删除重复项,其中 id 是唯一的,但当您检查其他列时有相同的行。
例子:
id name age x
1 peter 25 II
2 peter 25 II
Run Code Online (Sandbox Code Playgroud)
该表有数万行。
row ×10
postgresql ×4
insert ×2
json ×2
mysql ×2
sql-server ×2
aggregate ×1
datatypes ×1
duplication ×1
group-by ×1
limits ×1
oracle ×1
record ×1
sequence ×1
sqlite ×1
terminology ×1
trigger ×1