标签: select

PostgresSQL:在 SELECT 语句中获取 UDT 的单个属性

我在 PostgreSQL 9.2 数据库中创建了一个用户定义类型,并尝试在SELECT语句中仅获取 UDT 的一个属性。但是,我似乎无法让我的代码工作。

创建类型和表:

CREATE TYPE  ttp AS (f1 int, f2 int);
CREATE TABLE tbl (ctyp ttp);
Run Code Online (Sandbox Code Playgroud)

SELECT声明:

-- does not work
SELECT ctyp.f1 FROM tbl
SELECT ctyp(f1) FROM testtable
Run Code Online (Sandbox Code Playgroud)

两次我都收到错误。是否可以访问 a 中 UDT 中定义的单个属性SELECT

postgresql select composite-types user-defined-type

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

如何使 select 语句被阻止?

您好,为了学习,我试图故意使 SQL select 语句被另一个简单的 SQL 删除或更新语句阻塞。我只喜欢 InnoDB 表。

为了准备测试,我创建了一个表

CREATE TABLE `test`.`client` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

并在表中插入了 1,000,000 行。


现在我要开始测试了。

在 MySQL 客户端 #1 中,我删除了所有行:

mysql #1> delete from client;
Run Code Online (Sandbox Code Playgroud)

当删除仍在执行时,在另一个 MySQL 客户端 #2 中,我尝试选择一行。

mysql #2> select * from client where id=1;
+---------+------+
| id      | name |
+---------+------+
| 1       | joe  |
+---------+------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

结果立即显示,选择没有被阻止。


接下来我将尝试另一个测试。我在表中插入了 1,000,000 行。

在 MySQL 客户端 …

mysql innodb deadlock select locking

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

使用变量来确定 Postgres 中 select 中的列名

我正在尝试从旧表创建新表结构的更新,但不使用函数。我正在尝试为其创建一个脚本。旧表是这样的:

旧表 ( OldTable)

姓名 可乐 列b 列_c
ABC 0 无效的 1
DEF 1 1 1
生长激素指数 无效的 1 0

并且,新表:

Users:

ID 姓名
1 ABC
2 DEF
3 生长激素指数

Rules:

ID 规则名称
1 可乐
2 列b
3 列_c
4 寒冷的

UserRule

ID_USER ID_规则

因此,我需要使用 TableMix 上的选择结果填充表 UserRules,其中用户名等于表 User 上的用户名,并且 TableMix 中列 <col_name> 的值等于 1。(select <col_name>来自 OldTable,其中 OldTable.name = Users.name)。嗯,我正在尝试这个:

DO $$
    DECLARE rules CURSOR FOR SELECT column_name FROM information_schema.columns
        WHERE table_schema = 'public' AND table_name   = …
Run Code Online (Sandbox Code Playgroud)

postgresql scripting dynamic-sql select

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

Like 查询如何与索引表一起使用

我正在 Spring-java 和 mysql 工作。

我必须查询尺寸表100k records。表有 10 列。在我的 sql select 查询中,我必须在 4 列上使用 %text% 搜索进行类似的查询。这 4 列是 varchar(200),平均文本大小为 30 个字符。

我浏览了一些博客和答案来了解索引,读完后我想到了这个问题。

将这 4 列单独FULLTEXT索引,会影响类似查询的执行时间吗?

谢谢

mysql index select

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

SELECT + INSERT 或单独插入

我有一个应用程序,其中有几台设备每秒向我的服务器发送数据。在数据库上,我有一个包含设备的表和另一个每秒发送数据的表。

设备第一次发送数据时,服务器脚本应INSERT在设备表中注册 ( ) 该设备 ID 并将数据添加到数据表中。

我的问题是,什么会更快?

  1. 执行SELECT EXISTS查询以确定INSERT设备表中是否需要一个。如果SELECT EXISTS返回 false 则执行 an INSERT,否则什么都不做。

  2. 总是执行一个INSERT语句。考虑到设备 id 是表上的主键,如果设备已经存在它会返回一个错误,否则它会插入它。

只有第一次设备发送数据时才需要一个实际的INSERT,之后INSERT就不需要了。

PostgreSQL 版本是 9.4。

设备表定义如下:

CREATE TABLE common.tag
(
  customer integer,
  hostname character varying(150),
  description text,
  model integer,
  configprofile integer,
  id character varying(150) NOT NULL,
  host integer,
  CONSTRAINT tag_pk PRIMARY KEY (id),
  CONSTRAINT tag_fk_client FOREIGN KEY (customer)
      REFERENCES common.customer (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON …
Run Code Online (Sandbox Code Playgroud)

postgresql insert select referential-integrity

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

SQL Server:行顺序

我们都知道一个简单的语句例如:

SELECT * FROM stuff;
Run Code Online (Sandbox Code Playgroud)

应该不会产生有序的结果。然而,当我试图证明这一点时,它总是以主键顺序出现。

此外还有一个声明,例如:

SELECT thing,whatever FROM stuff
GROUP BY thing,whatever;
Run Code Online (Sandbox Code Playgroud)

似乎总是按GROUP BY子句中的最后一个字段对事物进行排序,这根本没有帮助。

问题是,在什么情况下 SQL SERVER 会在未询问的情况下对结果进行排序,我该怎么做才能阻止这种情况?

我试图向我的学生证明,除非指定,否则顺序是不确定的,但这对我的情况没有帮助。

我承认我正在处理一小组样本数据。

谢谢

sql-server order-by select group-by

5
推荐指数
2
解决办法
445
查看次数

用于选择返回行的 csv 的表名的文档

似乎在 Postgres 9.2 中这种语法

SELECT <table name>
FROM <table name>
Run Code Online (Sandbox Code Playgroud)

返回所有列聚合为伪 CSV 的行,如下所示:

(1,test,48,,48,,"2016-10-29 00:47:09.348986+00","2016-10-29 00:47:09.348986+00",,1,9,1,1,,1,0,"",,"")
(6,subject,0,,,,"2016-10-30 00:54:38.203023+00","2016-10-30 00:54:38.203023+00",,1,10,1,3,,1,0,content,,)
Run Code Online (Sandbox Code Playgroud)

我正在尝试查找此行为的相关文档。到目前为止,我已经看过了:

但我似乎找不到任何参考资料。

postgresql select postgresql-9.2

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

PostgreSQL 将未定义的 JSONB 字段动态转换为一行

我有一个类型为字段的表jsonb,我想为所有 json 键拆分字段 jsonb 的列。此列缺少架构。例如:

CREATE TABLE v(id,jsonb)
  AS VALUES
    (1,'{"a":"4", "b":"5"}'::jsonb),
    (2,'{}'),
    (3,'{"a":"8", "c":"9", "d":"9"}');
Run Code Online (Sandbox Code Playgroud)

id  |  a   |   b   |  c  |  d

1   |  4   |   5   |     |  
3   |  8   |       |  9  |  9
Run Code Online (Sandbox Code Playgroud)

对于这种特定情况,一种解决方案是

select * from table, json_to_record(optional) as x("a" text, "b" text, "c" text, d text)
Run Code Online (Sandbox Code Playgroud)

如您所见,键可能会有所不同,并且在大型数据库中很难将所有键都放在我的实际问题中,我有 31 个键,另一方面,如果我想在其他表中重用此脚本,我必须手动填充键。

有没有办法在 jsonb 的所有键上进行选择而无需手动指定键?

postgresql select json

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

由于缺少 oid 运算符,无法从 pgAdmin4 中的表中输出数据

我目前在本地运行 Postgresql 10.6,我使用 PgAdmin 4.12 与之交互,直到今天一切都运行良好。但是今天我在 pgAdmin 查询编辑器中运行了以下查询:

SELECT * FROM test_table LIMIT 100
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

ERROR:  operator does not exist: - oid at character 125
HINT:  No operator matches the given name and argument type. You might need to add an explicit type cast.
STATEMENT:  SELECT at.attname, at.attnum, ty.typname
        FROM pg_attribute at LEFT JOIN pg_type ty ON (ty.oid = at.atttypid)
        WHERE attrelid=-1519044407::oid AND attnum = ANY (
            (SELECT con.conkey FROM pg_class rel LEFT OUTER JOIN pg_constraint con ON con.conrelid=rel.oid
            AND …
Run Code Online (Sandbox Code Playgroud)

postgresql select table pgadmin-4 objectid

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

如何在MySQL中选择所有列加上一个别名列

这是一个简单的问题,但我找不到答案。

我想使用SELECT *语句选择表中的所有列,但我还需要通过这种方式为 UUID 列添加别名:BIN_TO_UUID(ID) as ID

我需要这样的东西:

SELECT BIN_TO_UUID(ID) AS ID, * FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

另外,最好删除别名的原始列,以免同一列两次具有不同的名称,但前提是这不会向查询添加更多文本,因为我将不得不对所有 16 个表重复此操作。

mysql query select alias mysql-8.0

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