问题标签 [mysql-dependent-subquery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 如果 ip 地址存在于另一个表 MYSQL 中,则增加一个表中的计数器列
我有一个viewCount
专栏table_1
。每次具有新 IP 地址的用户访问该页面时,我都会将viewCount
列增加 1。这是为了记录有多少人访问了该页面。在表中table_2
,我保留了用户的 IP 地址以及行的 ID table_1
。以下是当我进行更新查询时列的外观和可能的场景案例,我目前正在尝试对其进行优化。
tabel_1
:
table_2
:
可能的场景:IP 地址为的用户0.1.0.0
访问该页面。我查询 table_2 以查看是否存在具有 tb1_id 和当前用户 IP 地址的行。如果不是,我将不存在的用户的 IP 地址保存到table_2
并增加 viewCount in table_1
。
我的问题是我怎样才能只进行 1 次查询(即一次访问数据库)并执行此操作?
这是我想出的代码,但虽然工作得很好,但需要不止 1 次
任何有助于提高代码效率和减少访问数据库的帮助将不胜感激
mysql - 从列中选择唯一值,但基于另一个排序
我需要基于 postID 的 desc 顺序的唯一 parent_threads 列表,postID 始终是唯一的,但通常 parent_thread 字段对于多个帖子是相同的。
所以我需要的是一个帖子列表,以便他们得到回复。
因此,例如在下图中,我需要忽略帖子 400 和 399,因为它们是重复的。我有一个使用子查询的查询,但这个子查询的问题是它有时可能需要长达 1 秒的时间来查询,我想知道是否有更有效的方法来做到这一点。我已经尝试过 group by 和 distinct,但总是得到错误的结果。
这是我的查询,它产生了我想要的结果,这通常很慢。
mysql - MySQL 分组和计数性能
我有两张桌子
- 出口
索引
- 出口历史
索引
我需要获得拥有最多电子邮件(用户)的顶级城市 ID。还有 export_history 表。我需要从结果中排除电子邮件。
最终查询看起来像
主要查询
执行时间约为 7 秒。问题是执行需要这么多。
解释显示:
请注意这两个查询的工作速度非常快 > 0.01 秒
查询 1
执行时间约为 0.1 秒
查询 2
执行时间约为 0.02 秒
您能否推荐任何建议以提高主查询的性能?
sql - 从下表中,编写查询以获取完成该程序的唯一医师的专业直方图
从下表中,编写查询以获取已完成手术但从未开过任何处方的独特医师的专业直方图。
病人治疗台
事件类别表
医师专业表
样本输出:
我使用的数据库是 Mysql
mysql - 优化 SQL 计数
我必须从一个表中选择一个目录列表,并在另外两个表中执行计数:商店和类别。计数器应该显示有多少商店和类别链接到每个目录。我已经设法使用这个 SQL 查询获得了我需要的功能:
这按预期工作。但我不喜欢执行子查询,因为它们很慢,而且这个查询可能在 LARGE 列表上表现不佳。有没有使用 JOIN 优化这个 SQL 的方法?提前致谢。
mysql - 对于这个复杂的数据,查询应该是什么样子?
我被困在创建一个复杂的查询......也许那里有一些帮助?:) 我有一张带有设备状态的表格。每次设备状态更改都会生成一个条目。我想要的是一个输出,我可以在其中看到所有设备的最新每个日期 - 对于表中包含的所有日期。在这个例子中 04.05.2021 - 06.05.2021。我想将它用于仪表板。
谁能帮我吗?
以下是该表的外观示例:设备更改表:
ID | 设备ID | 改变 | 预值 | 后值 |
---|---|---|---|---|
20 | 40 | 04.05.2021 13:00 | - | 上 |
21 | 41 | 04.05.2021 13:00 | - | 上 |
22 | 42 | 04.05.2021 13:00 | - | 上 |
23 | 43 | 04.05.2021 13:00 | - | 上 |
24 | 44 | 04.05.2021 13:00 | - | 上 |
25 | 45 | 04.05.2021 13:00 | - | 上 |
26 | 46 | 04.05.2021 13:00 | - | 上 |
27 | 47 | 04.05.2021 13:00 | - | 上 |
28 | 48 | 04.05.2021 13:00 | - | 上 |
29 | 40 | 05.05.2021 15:00 | 上 | 离开 |
30 | 40 | 05.05.2021 16:00 | 离开 | 恢复 |
31 | 40 | 05.05.2021 17:00 | 恢复 | 等待 |
32 | 41 | 06.05.2021 09:00 | 上 | 离开 |
33 | 41 | 06.05.2021 10:00 | 离开 | 等待 |
35 | 40 | 06.05.2021 11:00 | 等待 | 上 |
我想要实现的输出如下:
LATESTSTATPERDATE | 设备ID | 改变 | 预值 | 后值 |
---|---|---|---|---|
04.05.2021 | 40 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 41 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
04.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 40 | 05.05.2021 17:00 | 恢复 | 等待 |
05.05.2021 | 41 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
05.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 40 | 06.05.2021 11:00 | 等待 | 上 |
06.05.2021 | 41 | 06.05.2021 10:00 | 离开 | 等待 |
06.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
06.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
mysql - SQL,select语句如何在相关子查询中运行
我试图理解以下代码。我认为第一个子查询将创建一个包含 2、3、4、5、6 的表。对于第二个子查询,我认为它将按如下方式运行。例如,@divisor 的初始值为 1,对于 nn=2,@num2<=nn 的条件有效,则执行 select 语句,则 @divisor 为 2。由于 where 条件仍然有效,再次运行select语句,使@divisor的值为3。此时where条件无效,select语句将停止。
基于这样的理解,我认为代码的结果应该是2,3,4,5,6,@divisor的最终值为6。但是,当我在mysql中运行代码时,结果为null。没有记录。
有人可以帮我吗?非常感谢。
mysql - MySQL查询根据日期之间的差异返回1和0
在 MySQL 数据库中,我有一个包含“LastDate”列的表 ABC。
数据类型为 DATETIME 的LastDate 。此“NULL”的默认值
我需要为在这些情况下返回“1”的表编写一个查询。1) 如果 DATEDIFF(CURRENT_TIME,LastDate) >15 或如果 DATEDIFF(CURRENT_TIME,LastDate) 为 NULL(即 defaultVal)。
如果 DATEDIFF(CURRENT_TIME,LastDate) 小于 15,则返回“0”。
我试图为此编写一个 SQL 查询,但无法做到。请帮我写这个查询。提前致谢。
mysql - 使用 MIN() 子查询 MySql
使用 QT5.15.1,Windows 10 64,最后 Mysql 连接:
我的查询:
这会返回一个我不明白的错误:
#1064 - Erreur de syntaxe près de 'LIMIT 0, 25' à la ligne 1
为什么我所有使用如下子查询的查询都返回此错误?:
Select xxx,yyyy from (Select xxx,yyyy from table_name union all Select xxx,yyyy from table_name1)
我需要有一个像这样的查询:
Select MIN(date_example) FROM (SELECT date1 as date_example from table1 UNION ALL SELECT date2 as date_example from table2)
所有这些查询都可以在 sqlite 上正常工作,但是它们不能在 mysql 上工作,并且没有任何解释的错误对我没有帮助......
非常感谢你们的帮助;-)