查看名称数据操作语言 (DML)我会假设,所有包含的语句实际上都是用于操作数据。
据我所知该SELECT语句只能用于查询数据,不能更改它。(INSERT ... SELECT这里不考虑。)
所以是SELECTDML 的一部分,如果是,为什么?
我正在运行 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) 在表中作为
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 数据库表,它引用了不同的单词及其在文档中的位置。我想返回包含所有单词的文档的 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 …
我有两个疑问:
第一个如下:
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 *来返回已删除的行。我想要实现的是删除行并在一个查询中返回它们。我怎样才能做到这一点?
这个答案向我提出了如何在这样的函数之间VALUES和SELECT中进行选择的问题。在 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
我有一个包含这些字段的表结果:
每个 number_* 列可以包含一个从 01 到 90 的数字。
我有一个带有 90 个复选框的搜索表单。用户最多可以勾选 5 个复选框。
一旦用户选择 n 复选框,我需要构建一个查询来查找包含所有这些值的行,但数字可以位于五列中的任何一列。
例子:
用户勾选复选框 02、12 和 20。我需要检索所有三个数字的所有行,但我的数字可以在任何 number_* 列中。20 可以在 number_one 列中,02 可以在 number_three 列中,12 可以在 number_four 列中。如何构建此查询?
另外,使用一列而不是五列会更好吗?结果表:
列号包含 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 进行此设置:
我有一个 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' …
我们遇到了一个小故障,导致设备产生了意外数量的数据。我们的代码最终沿着 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
关于可能导致这种行为的任何想法?
似乎在 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)
我正在尝试查找此行为的相关文档。到目前为止,我已经看过了:
但我似乎找不到任何参考资料。