标签: select

SELECT 语句是否计入 DML?

查看名称数据操作语言 (DML)我会假设,所有包含的语句实际上都是用于操作数据。

据我所知该SELECT语句只能用于查询数据,不能更改它。(INSERT ... SELECT这里不考虑。)

所以是SELECTDML 的一部分,如果是,为什么?

dml select database-theory

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

如何在获取记录数和最小值/最大值的 MySQL 查询中使用 GROUP_CONCAT DISTINCT 值?

我正在运行 MySQL 5.0.88 (Coldfusion8)

我有一个产品搜索,我正在查询number-of-results以及min/max prices/rebates整个产品表。我还想包含一个 的字符串distinct sizes/colors,这样我就可以在显示结果的同时更新我的​​搜索条件。

但是我的 GROUP_CONCAT 没有返回所有预期值。我不知道我错过了什么,但它似乎只返回不同的min/max尺寸/颜色,而不是返回all整个记录集的不同尺寸/颜色。

我的产品表:

 CREATE TABLE dummy (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`iln` VARCHAR(13) NULL DEFAULT NULL,
`ean` VARCHAR(35) NULL DEFAULT NULL,
`artikelnummer` VARCHAR(35) NULL DEFAULT NULL,
`groesse` VARCHAR(10) NULL DEFAULT NULL,
`farbe` VARCHAR(35) NULL DEFAULT NULL,
`farbnummer` VARCHAR(10) NULL DEFAULT NULL,
`preis_ek` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_vk` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_aktuell` DECIMAL(12,2) NULL DEFAULT NULL,
`firma` VARCHAR(35) NULL DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql query subquery select

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

带有 WHERE 子句的多个“GROUP_CONCAT”

在表中作为

id    name      type           info
1     BMW       car            yes
2     Reno      car            no
3     IBM       electronics    no
4     Sony      electronics    yes
5     Mazda     car            yes
Run Code Online (Sandbox Code Playgroud)

GROUP_CONCAT用来获取每个的列表type,但我想将连接的列分隔为按列分类的多个列info。它应该是这样的

SELECT type,
       GROUP_CONCAT(name) ORDER BY id ASC SEPARATOR ' ') AS list_with_info
       GROUP_CONCAT(name) ORDER BY id ASC SEPARATOR ' ') AS list_without_info
       FROM table1 GROUP BY type
Run Code Online (Sandbox Code Playgroud)

如何引入WHERE子句或使用其他方法返回多个连接列?

mysql select group-by group-concatenation

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

如何从单列必须包含两个(或更多)值的表中选择项目?

我有一个 MySQL 数据库表,它引用了不同的单词及其在文档中的位置。我想返回包含所有单词的文档的 ID。

这是一个示例表。

docid     wordid
1         4
2         4
1         2
1         5
Run Code Online (Sandbox Code Playgroud)

好的,现在假设有人在数据库中查询了 WORDID 为 4、2 和 5 的单词。

我错误的 SQL SELECT 语句类似于:

Select docid from table where wordid = 4 and wordid = 2 and wordid = 5
Run Code Online (Sandbox Code Playgroud)

这给了我 0 结果。

我在其他地方看到where in有人建议使用该条款:

如果我理解正确,这是编写 OR 子句的另一种方式。我试过这个:

select docid from table where wordid in (4,2,5)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我所有的结果。它应该排除 docid 2,因为它不包含其他词。我期待获得 docid 1。

但是,我可能会where in错误地使用该子句,因为我的数据库经验很少。

如何返回包含所有单词的 docid?

另请注意,我的 where 子句将在 FOR 循环中动态生成。查询可以是一两个词那么简单,也可以是 10 或 12 …

mysql select

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

加入并返回数据时如何从表中删除行?

我有两个疑问:

第一个如下:

SELECT * 
FROM batch bp 
  INNER JOIN sender_log sl ON sl.id=bp.log_id 
    AND bp.protocol='someprotocol'
Run Code Online (Sandbox Code Playgroud)

第二个查询用于删除行:

delete from batch where protocol='someprotocol'
Run Code Online (Sandbox Code Playgroud)

我知道在 postgres 中我们有RETURNING *来返回已删除的行。我想要实现的是删除行并在一个查询中返回它们。我怎样才能做到这一点?

postgresql join delete select

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

如何在 VALUES 和 SELECT 之间选择 INSERT?

这个答案向我提出了如何在这样的函数之间VALUESSELECT中进行选择的问题。在 x86_64-unknown-linux-gnu 上使用PostgreSQL 9.4.3,由 gcc (Debian 4.9.2-10) 4.9.2, 64-bit 编译

CREATE OR REPLACE FUNCTION insaft_function()
   RETURNS TRIGGER AS
$func$
BEGIN     
   INSERT INTO file_headers (measurement_id, file_header_index_start
                                           , file_header_index_end)
   VALUES (NEW.measurement_id, TG_ARGV[0]::int, TG_ARGV[1]::int);

   RETURN NULL;  -- result ignored since this is an AFTER trigger
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

VALUES处理多行,但SELECT你可以做更多的事情。这里唯一的要求是对INSERT表格执行上述操作。您可以假设INSERT在系统的持续质量保证中每个周期完成100k 次这样的操作。

我注意到这些差异与我的数据不同,这里选择了三个中值:

VALUES
real      user      sys
-------------------------------
0m0.353s  0m0.256s  0m0.028s
0m0.327s  0m0.252s  0m0.036s
0m0.358s …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger performance select postgresql-performance

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

在多列中搜索多个值

我有一个包含这些字段的表结果:

  • ID
  • 结果 ID
  • number_one (int)
  • number_two (int)
  • number_three (int)
  • number_four (int)
  • 数字五(整数)

每个 number_* 列可以包含一个从 01 到 90 的数字。

我有一个带有 90 个复选框的搜索表单。用户最多可以勾选 5 个复选框。

一旦用户选择 n 复选框,我需要构建一个查询来查找包含所有这些值的行,但数字可以位于五列中的任何一列。

例子:

用户勾选复选框 02、12 和 20。我需要检索所有三个数字的所有行,但我的数字可以在任何 number_* 列中。20 可以在 number_one 列中,02 可以在 number_three 列中,12 可以在 number_four 列中。如何构建此查询?

另外,使用一列而不是五列会更好吗?结果表:

  • ID
  • 结果 ID
  • 数字(字符串)

列号包含 02-12-20-57-84,其中 - 是分隔符。

示例:用户勾选复选框 02、12 和 20。所以我的查询将是

SELECT * 
FROM results 
WHERE numbers LIKE "%02%" 
    AND numbers LIKE "%12%" 
    AND numbers LIKE "%20%";
Run Code Online (Sandbox Code Playgroud)

更新:我目前正在使用 MySQL 进行此设置:

  • ID
  • 结果 ID
  • number_one …

mysql performance select where query-performance

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

Like 谓词只匹配整个单词

我有一个 SQLite 数据库,其中有一个名为minecraft.

+----+----------------------+
| id |         name         |
+----+----------------------+
|  1 | Pocket Mine MP       |
|  2 | Open Computers       |
|  3 | hubot minecraft skin |
|  4 | Terasology           |
|  5 | msm                  |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

我需要找到所有在其“名称”字段中包含“e”和“o”的记录。这是我的选择查询:

select * from minecraft where name like '%e%o%'
Run Code Online (Sandbox Code Playgroud)

以下是上述查询的结果:

+----+----------------+
| id |      name      |
+----+----------------+
|  2 | Open Computers |
|  4 | Terasology     |
+----+----------------+
Run Code Online (Sandbox Code Playgroud)

问题是 Like 谓词匹配整个值,而不是单词。不应该匹配 id = 2 的行,因为所有条件都没有出现在一个单词中('e' 出现在第一个单词中,'o' …

sqlite select like

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

Mysql 查询在 SELECT IN (xx,xxx,xx) 中使用 33594 个参数在 200 毫秒内运行,但在使用 33595 个或更多参数时运行数小时,为什么?

我们遇到了一个小故障,导致设备产生了意外数量的数据。我们的代码最终沿着 SELEXT * from XXX WHERE yyy IN (xxx,xxx,xxx....,xxxx) 的行创建一个选择查询,这应该获取过去 5 天的数据,这通常根本不是问题,因为WHERE 字段已建立索引。

我们突然开始出现大量缓慢的查询并使服务器陷入困境。在我们中止查询之前,查询运行了大约 5000 秒。弄清楚发生了什么后发现,如果我们在 IN () 子句中有一个最多包含 33594 个参数的查询,则一切正常,查询会在 200 毫秒内完成。如果我们添加一个参数,选择似乎会永远运行。我们没有让一个无限期地运行直到它完成,所以我不确定它是否会完成,但它们似乎至少持续几个小时......

select 内的数据约为 361.04KB。我们在 Google Cloud SQL 上运行 MYSQL MYSQL_8_0_31

关于可能导致这种行为的任何想法?

mysql select google-cloud-sql

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

用于选择返回行的 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
查看次数