小编ype*_*eᵀᴹ的帖子

一组 with 后的多个插入查询

我正在尝试以一种可重现的方式用一些测试数据填充数据库。

假设(一个过于简化的示例)三个基表:name、city、job 和两个关系表:name-city 和 name-job。我需要在三个基表中的每一个中创建一个条目,并使用上述条目在两个关系表中创建条目。

我已经拥有了一种使用一系列with查询在 3 个基表中创建条目并将值插入到一个关系表中的方法。

with x as 
(INSERT INTO "public"."name" VALUES(DEFAULT) RETURNING "id"),
y as 
(INSERT INTO "public"."job" VALUES(DEFAULT) RETURNING "id"),
z as 
(INSERT INTO "public"."city" VALUES(DEFAULT) RETURNING "id")

INSERT INTO "public"."name-job"("name", "job")  
select x.id, y.id from x,y;
Run Code Online (Sandbox Code Playgroud)

我真的想添加第二个插入语句

INSERT INTO "public"."name-city"("name", "city")  
select x.id, z.id from x,z;
Run Code Online (Sandbox Code Playgroud)

第一次插入后,但不知道如何。我曾尝试用逗号分隔两个插入语句,并将它们括在括号中,然后用逗号分隔它们,以及其他一些方法,但没有任何效果。

使用带有第二个插入的全新语句并不完全是一种选择,因为我需要使用相同的 x、y、z 值。鉴于我缺乏专业知识/经验,我完全有可能遗漏了一些明显的东西......所以任何关于我如何做到这一点的想法,理想情况下,没有高度复杂的工具,将是最受欢迎的。

FWIW,我正在使用 Postgres (10.x)

postgresql insert subquery postgresql-10

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

CTE 和子查询的非常奇怪的结果

WITH t1 AS (SELECT a.id,
                   AVG(standard_qty) std_avg,
                   AVG(poster_qty) pos_avg,
                   AVG(glossy_qty) gloss_avg
            FROM accounts a
            JOIN orders o
            ON a.id = o.account_id
            GROUP BY 1),

     t2 AS (SELECT MAX(std_avg) max_std_avg,
                   MAX(pos_avg) max_pos_avg , 
                   MAX(gloss_avg) max_gloss_avg
            FROM t1)

SELECT std_id , max_std_avg, pos_id , max_pos_avg, glos_id , max_gloss_avg
FROM(SELECT
        (SELECT id std_id  FROM t1,t2 WHERE std_avg = max_std_avg),
        (SELECT id pos_id  FROM t1,t2 WHERE pos_avg = max_pos_avg),
        (SELECT id glos_id FROM t1,t2 WHERE gloss_avg =max_gloss_avg)
    )foo ,t1,t2
Run Code Online (Sandbox Code Playgroud)

结果:

std_id  | max_std_avg| pos_id …
Run Code Online (Sandbox Code Playgroud)

cte subquery

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

从不打 SQL Server 补丁?

我知道Brent 的帖子为什么没有人在这方面修补他们的 SQL Server ..... 和我的一位朋友一起,请假设一个这样的场景,其中近 100 个 SQL Server 从未打过补丁。假设任何用户都没有报告过错误或性能问题。那么,我的朋友是否有一种很酷的方法来识别所有服务器 - 他不知道 - 并且很少有服务器可能已经遇到了一些错误?换句话说,如何在 100 个 SQL Server 中主动发现错误?

一个计划是阅读那些错误的发行说明,其中错误可以使用服务器触发器在发生的基础上(可能是)......在本地表中捕获......在中央位置的SSIS。

但是,这个计划似乎值得吗?

特别关注那些可能会对数据产生影响的错误。(仅供参考,具有纯度的 DBCC CheckDB 运行无错误)。或者一些可能的业务损失。

最后假设,确实在某些 SQL Server 中检测到了一些错误 - 那么,当多年来用户没有报告任何问题时,如何以及为什么将它们视为“威胁”?

sql-server patching

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

WHERE 子句中的短路

如何在 where 子句中短路,例如:

select 1 where 1=2 AND 1/0=0
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,1/0=0不应评估条件,因为第一个条件为假。

sql-server

0
推荐指数
1
解决办法
1784
查看次数

在某种数据库上存储 2^266 条记录是不可能的吗?

每条记录重 52 字节,如果有人拥有所需的存储空间,在今天的技术中是否可能?什么样的数据库可以保存数据并可以检索它。

一个示例记录:

(5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
,1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a
,1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9)
Run Code Online (Sandbox Code Playgroud)

记录数为 115792089237316195423570985008687907853269984665640564039457584007913129639936

database-design storage

0
推荐指数
3
解决办法
1318
查看次数

将数据插入多个表

对于我的系统,学生需要通过填写注册表(个人、联系方式和课程详细信息;还有用户名和密码)来创建一个用户帐户。

我需要通过一个表单收集注册数据,并将收集到的数据插入到我数据库中的两个相关表中(student表中的所有学生详细信息和users)。

我如何最好地在 php 中编码?

实体关系模型

mysql database-design php application-design

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

是否有 SELECT 语句来减去同一列的行?

在此处输入图片说明

第 1 列是mem_id,第 2 列是Transaction typeC 和 D,第 3 列是Amount Owed。所以我想返回第 3 列“欠款”,但它必须是每个成员在第 2 列中的 CD。谢谢,我希望有帮助。

mysql

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

去除最后两位数字

如果我在表中将 12345678、1234567、123456 作为列并使用 sql 创建一个新列,该列将包含删除每个数字的最后两位数字的新数字。新列将有 123456、12345、1234。

有人会帮忙在 Microsoft sql 环境中编写此代码吗

sql-server

0
推荐指数
1
解决办法
2900
查看次数

仅返回重复数据

我在整个互联网上搜索堆栈溢出,但我找到的每个示例都只有一行,或者根本不起作用。

我有这张桌子:

TBL_RELATORIOS_TAMANHOS

table_catalog
table_name
column_name
data_type
character_maximum_length
numeric_precision
numeric_scale
Run Code Online (Sandbox Code Playgroud)

在它里面我有所有表中的所有列。我只需要找到那些具有不同精度、大小等的列。

使用 row_number 我得到了这个:

;WITH CTE AS
(
SELECT DISTINCT table_name 'Tabela', 
       column_name 'Coluna',
       character_maximum_length as 'Tamanho', 
       numeric_precision as 'Precisao_Numerica', 
       numeric_scale 'Escala_Numerica'
FROM TBL_RELATORIO_TAMANHOS
)
SELECT *,
    ROW_NUMBER() over ( partition by Tabela,Coluna order by Tabela,Coluna)
FROM CTE
ORDER BY 1,2
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以看到上面有一个的列2,所以这个是重复的(相同的列,不同的大小,精度等)。

| table_Name              | Column_name      | character_maximum_length | numeric_precision | numeric_scale | Row_number |
|-------------------------|------------------|--------------------------|-------------------|---------------|------------|
| ACOES                   | ID_BMF           | 20                       | NULL              | NULL          | 1 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

0
推荐指数
1
解决办法
652
查看次数

为什么我会收到错误消息“'<列名>' 必须出现在 GROUP BY 子句中或用于聚合函数中”?

我哪里错了?为什么在添加 MAX 函数时会收到该消息?

查询涉及:

WITH
   references_cve AS (
      SELECT vulnerability_id, reference
      FROM dim_vulnerability_reference
      WHERE dim_vulnerability_reference.source = 'NVD'
   )
SELECT DISTINCT ON (
      da.ip_address,
      favi.port,
      dv.severity,dp.name, dv.title,
      dv.description,
      fix,
      dv.nexpose_id,
      cve.reference,
      da.host_name,
      dos.description,
      da.last_assessed_for_vulnerabilities,
      davbs.solution_id
   )
   da.ip_address AS IPAddress,
   CASE WHEN favi.port = -1 THEN NULL ELSE favi.port END AS Port,
   dv.severity AS Severity,
   dp.name AS Protocol,
   dv.title AS VulnerabilityName,
   htmlToText(dv.description) AS Summary,
   htmlToText(dv.description) AS Description,
   htmlToText(fix) as Solution,
   'https://www.rapid7.com/db/vulnerabilities/' || dv.nexpose_id as SeeAlso,
   dv.nexpose_id AS NexposeID,
   ''||null as PluginOutput,
   cve.reference …
Run Code Online (Sandbox Code Playgroud)

postgresql group-by errors

0
推荐指数
1
解决办法
579
查看次数