我正在寻找用于编写 Access SQL 语句的在线资源。我使用 SQL 编写查询,因为 UI 限制了可以查询的内容。我一直在使用w3schools作为参考,但是 MS-Access 有时的语法略有不同,因此当我运行查询时会出现错误。然后我最终浪费时间试图找出我做错了什么,却发现 Access 的做法不同。

我有一个包含以下文本的表格,我要搜索的关键字是“搜索”。所以我写了一个查询
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
[TextValue] LIKE '%Search%'
Run Code Online (Sandbox Code Playgroud)
Q.1如何修改查询,以便只返回文本中包含“搜索”的记录,而不是使用“LSearch”。即根据图像前三个记录只返回。?
我有一个电子邮件类型的应用程序,想为用户选择所有消息(收件箱)。问题是我将电子邮件的标题部分规范化到数据库中,这样平面数据就会进入消息表,而从、到、抄送、密件抄送则存储到另一个表中。
根据 PK/ FK 关系。
我非常重视的一件事是 SQL 解决方案的效率,因为这将是多次执行的代码,并且可能是整个数据库中运行次数最多的 sql
这里的上下文是我的数据库模式的视图。

我有过类似的事情无法控制tmp_table_size和max_heap_table_size,所以作为我们成长的表,要求临时表的查询所用的时间是几何级数增长。
我想知道是否有办法防止 MySQL 对这些查询使用临时表?在这种情况下最好的方法是什么:
这是最大的罪犯的一个例子:
SELECT `skills`.`id`
FROM (`jobs_skills`)
JOIN `jobs` ON (`jobs`.`id` = `jobs_skills`.`job_id`)
JOIN `skills` ON (`skills`.`id` = `jobs_skills`.`skill_id`)
WHERE `jobs`.`job_visibility_id` = 1
AND `jobs`.`active` = 1
AND `skills`.`valid` = 1
AND `jobs_skills`.`skill_id` IN (96,101,103,108,121,2610,99,119,2607,102,104,112,113,122,1032,1488,2608,109,126,1438,2310,2318,2622,118,1046,1387,2609,100,116,123,2611,2612,2616,2618,114,127,1562,1587,1608,2276,2615,125,1070,1071,1161,1658,2613,2614,2617,105,110,111,120,1394,1435)
GROUP BY `jobs_skills`.`job_id`
Run Code Online (Sandbox Code Playgroud)
其中copying to temp table耗时 107 秒,占总查询时间的 99%。
尽管担心 tl;dr 综合征,我还是提供。. .
更多细节
以下是EXPLAIN查询语句:
+----+-------------+-------------+--------+----------------------+--------------+---------+----------------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows …Run Code Online (Sandbox Code Playgroud) 为什么
SELECT Barraportfolioname
FROM portfolio
WHERE id IN (SELECT DISTINCT i1.portfolioid
FROM Import i1
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL)
Run Code Online (Sandbox Code Playgroud)
需要 0 秒,而以下查询需要 5 秒。
SELECT DISTINCT p.BarraPortfolioName AS name
FROM Import i1
INNER JOIN Portfolio p
ON p.ID = i1.PortfolioID
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
我正在使用 SQL Server。这两个表在查询中使用的所有列上都有索引,即portfolioid、id、importsetid。 …
我对 Oracle SQL 非常陌生,尤其是在 Pentaho 报告生成器中。它可以让你做一些事情并阻止其他人。PL/SQL 不可用,因此我必须在查询中执行此操作。
我需要能够为他们MIN(service_date)和他们的MAX(service_date). 下面是表格数据和我想得到的结果。
表格数据
client_id | service_date | other_stuff
---------------------------------------
1 | 2/24/2010 | Bob
1 | 3/23/2010 | Jane
1 | 4/23/2010 | Sam
2 | 1/1/2000 | Julie
2 | 2/2/2000 | Tina
3 | 3/28/2005 | D'Shaun
3 | 4/27/2005 | Leisha
3 | 5/29/2005 | Tonay
Run Code Online (Sandbox Code Playgroud)
结果数据
client_id | service_date | other_stuff
--------------------------------------
1 | 2/24/2010 | Bob
1 | 4/23/2010 | Sam
2 | 1/1/2000 …Run Code Online (Sandbox Code Playgroud) 我有一个表 mytable (id, "someLongURI", status, "userId") 和一个工作查询:
UPDATE mytable
SET status = 'IN_WORK'
WHERE "someLongURI" IN (
SELECT "someLongURI"
FROM mytable
WHERE status = 'UNUSED'
AND pg_try_advisory_xact_lock(id)
ORDER BY id ASC
LIMIT 1
FOR UPDATE
)
RETURNING id, "someLongURI";
Run Code Online (Sandbox Code Playgroud)
但现在我需要检查“userId”参数,并基于此选择现有行或更新(并接收更新的行)。类似的东西(在 MySQL 中这可以工作):
IF NOT EXISTS (
SELECT 1
FROM mytable tbl
WHERE tbl."userId" = 123
)
THEN
UPDATE mytable tbl
SET tbl.status = 'IN_WORK',
tbl."userId" = 123
WHERE tbl."someLongURI" IN (
SELECT "someLongURI"
FROM tbl.mytable
WHERE tbl.status = 'UNUSED'
AND …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个查询,该查询会生成一个由 SQL Server 生成的 JSON 对象。我发现我可以使用子查询用包含问题列表的 JSON 字符串填充字段(在本例中为问题字段)。
下面是查询:
SELECT
quizzes.id AS 'id',
quizzes.name AS 'name',
quizzes.description AS 'description',
quizzes.instructions AS 'instructions',
author.id AS 'author.id',
author.midas AS 'author.midas',
author.first_name AS 'author.first_name',
author.last_name AS 'author.last_name',
author.email AS 'author.email',
author.tel AS 'author.tel',
author.department_name AS 'author.department_name',
author.created_at AS 'author.created_at',
author.last_updated AS 'author.last_updated',
course.id AS 'course.id',
course.name AS 'course.name',
course.description AS 'course.description',
course.crn AS 'course.crn',
instructor.id AS 'course.instructor.id',
instructor.midas AS 'course.instructor.midas',
instructor.first_name AS 'course.instructor.first_name',
instructor.last_name AS 'course.instructor.last_name',
instructor.email AS 'course.instructor.email',
instructor.tel AS 'course.instructor.tel',
instructor.department_name …Run Code Online (Sandbox Code Playgroud) 给定像“ABC”这样的输入,生成一个查询,计算给定字符串的 0 个或多个的所有潜在分割,
期望的输出,
A B C
A BC
AB C
ABC
Run Code Online (Sandbox Code Playgroud)
给定一个像“ABCD”这样的输入
A B C D
A BC D
A B CD
AB C D
A BCD
AB CD
ABC D
ABCD
Run Code Online (Sandbox Code Playgroud)
并不是所有关心输出如何形成、数组、行、json 等。更多的是寻找分组的所有排列的离散列表。
我目前正在查询sys.dm_db_log_info()DMV 以从数据库检索 VLF,以确定何时可以收缩、重组和减少 TLOG 文件中的碎片量(10 MB VLF)。
原因是,如果事务位于 TLOG 文件末尾并导致活动 VLF,则无法收缩 TLOG 文件。类似的情况,如果活动事务驻留在 TLOG 文件的中间,那么您就无法缩小到超过该 VLF。
我目前有这个语句来检索MAX(vlf_begin_offset)记录、MIN(vlf_begin_offset)记录和任何具有 active 的记录vlf_active = 1:
SELECT ddli.vlf_begin_offset,
ddli.vlf_sequence_number,
ddli.vlf_active,
ddli.vlf_status,
ddli.vlf_first_lsn
FROM sys.dm_db_log_info(DB_ID()) AS ddli
WHERE ddli.vlf_begin_offset = (
SELECT MIN(ddli2.vlf_begin_offset)
FROM sys.dm_db_log_info(DB_ID()) AS ddli2
)
OR ddli.vlf_active = 1
OR ddli.vlf_begin_offset = (
SELECT MAX(ddli3.vlf_begin_offset)
FROM sys.dm_db_log_info(DB_ID()) AS ddli3
)
ORDER BY
ddli.vlf_begin_offset ASC
Run Code Online (Sandbox Code Playgroud)
当所有记录都返回时,结果集如下所示:
+------------------+---------------------+------------+------------+------------------------+
| vlf_begin_offset | vlf_sequence_number | vlf_active | vlf_status …Run Code Online (Sandbox Code Playgroud) query ×10
sql-server ×3
postgresql ×2
dmv ×1
innodb ×1
json ×1
ms-access ×1
mysql ×1
oracle ×1
performance ×1
recursive ×1
subquery ×1