AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[mysql](coding)

Martin Hope
Cave Johnson
Asked: 2025-04-24 10:01:50 +0800 CST

如何列出连接表的所有记录并同时对其进行过滤?

  • 5

假设我有以下结构:

课程

ID 姓名
1 数学
2 历史

学生

ID 姓名 课程编号
1 鲍勃 1
2 爱丽丝 1

我想进行查询,列出一门课程中的所有学生,但如果特定学生参加了该课程,则过滤课程。

如果我使用以下查询,学生“Bob”不在以逗号分隔的学生列表中。

SELECT 
  c.name, 
  GROUP_CONCAT(s.name separator ',') 
FROM 
  Courses as c 
  LEFT JOIN Students s ON s.courseID = c.ID 
WEHRE 
  s.name = 'Alice'
GROUP BY
  c.name

我知道我可以连接两次,一次用于过滤,另一次用于GROUP_CONCAT,但感觉效率很低,因为我连接了两次。有没有更高效、更直接的方法来做到这一点?

mysql
  • 1 个回答
  • 41 Views
Martin Hope
chocalaca
Asked: 2025-04-20 02:03:31 +0800 CST

如何在Mysql中正确设置约束?

  • 8

当用户的电子邮件确认后,mysql 时间戳值会更新,并且其值不应等于“1970-01-01 00:00:01”(默认值)。我正在尝试创建一个 mysql 约束来强制执行此操作。因此,如果用户有以下内容:
confirmed=1
email_confirmed_time='1970-01-01 00:00:01'
...则违反了该约束。但如果 confirmed=0且时间戳相同,则表示该消息被接受。

下面的表格命令有什么问题?如果我插入以下内容,它会告诉我CHK_emailConfirmedTime_when_confirmed存在违规:

insert into user (username, `password`, first_name, last_name, `role`, `group`, logged_in, confirmed, approved, email_confirmed_time) values 
    ("0", "0", "joe", "dill", "{admin, user, guest}", "{create, read, update, delete}", 0, 0, 0, DEFAULT)
;
CREATE TABLE IF NOT EXISTS user (
    `id` SERIAL PRIMARY KEY,
    `username` varchar(75) NOT NULL,
    `password` varchar(100) NOT NULL,
    `first_name` varchar(50) NOT NULL,
    `last_name` varchar(50) NOT NULL,
    `role` varchar(25) NOT NULL DEFAULT "{guest}",
    `group` varchar(50) NOT NULL DEFAULT "{read}",
    `logged_in` int NOT NULL DEFAULT 0,
    `confirmed` INTEGER NOT NULL DEFAULT 0,
    `approved` INTEGER NOT NULL DEFAULT 0,
    `email_confirmed_time` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
    CONSTRAINT CHK_confirmed CHECK (`confirmed`=0 OR `confirmed`=1),
    CONSTRAINT CHK_approved CHECK (`approved`=0 OR `approved`=1),
    CONSTRAINT CHK_emailConfirmedTime_when_notConfirmed CHECK (`confirmed`=0 AND `email_confirmed_time`=TIMESTAMP('1970-01-01 00:00:01')),
    CONSTRAINT CHK_emailConfirmedTime_when_confirmed CHECK (`confirmed`=1 AND `email_confirmed_time`>TIMESTAMP('1970-01-01 00:00:01'))
);
mysql
  • 2 个回答
  • 67 Views
Martin Hope
Dom
Asked: 2025-04-15 22:28:46 +0800 CST

LEFT JOIN 子查询中的 GROUP_CONCAT 非常慢

  • 5

我有一个查询性能很差,我不知道问题出在哪里。下面是一个大大简化的查询版本,但仍然显示相同的问题:

SELECT members.id, 
FROM members
LEFT JOIN ( SELECT 
  member_id,
  GROUP_CONCAT(hobby)
  FROM member_hobbies
  GROUP BY member_id) AS hobbies
ON member.id=hobbies.member_id

上有一个主索引members.id, 上有一个匹配索引hobbies.member_id。

如果我删除它,GROUP_CONCAT查询速度将提高约 50 倍。

我知道上面给出的示例可以简化并且不需要子查询,并且我正在尝试简化我的完整查询。

我想知道是否有可能以当前形式优化查询以及问题出在哪里。

mysql
  • 1 个回答
  • 36 Views
Martin Hope
seventeen
Asked: 2025-04-06 03:44:30 +0800 CST

mySQL,Zulu 时间和时间戳给出意外结果

  • 7

我目前在伦敦,处于 BST(GMT + 1)时间,例如当地时间晚上 8 点。

当我在表中添加一个条目时,时间戳会自动设置,当我在 phpMyAdmin 中查看时,它会正确显示当前本地时间。

当我运行此查询时,它会返回最近插入的项目。

SELECT * FROM products WHERE added_date > '2025-04-05T20:00:00Z'

但这对我来说毫无意义。祖鲁时间晚上 8 点是当地时间晚上 9 点。

mysql
  • 1 个回答
  • 34 Views
Martin Hope
Toniq
Asked: 2025-04-04 04:21:01 +0800 CST

mysql 在一个查询中选择并设置变量

  • 4

我有两张桌子:

comments_table

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,//user who commented
`title` varchar(300) DEFAULT NULL,
`url` varchar(300) DEFAULT NULL,
`c_date` datetime,
`comment` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`)

id         comment    user_id
1         foo             1
2         bla             2  
3         something       7 

votes_table

`comment_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,//user who voted
`vote` tinyint(1) DEFAULT 0,
INDEX `comment_id` (`comment_id`)

comment_id user_id vote
1         2       1
2         4       -1  
3         7       0
3         1       1
2         1       1 

我有 2 个疑问(获取所有评论):

$comments = $wpdb->get_results($wpdb->prepare("SELECT ct.id, ct.comment, ct.user_id, ct.user_display_name, ct.avatar, ct.c_date, SUM(DISTINCT vt.vote) AS vote
                    FROM $comments_table as ct 
                    LEFT JOIN $votes_table vt on ct.id = vt.comment_id 
                    WHERE ct.media_id=%d 
                    GROUP BY ct.id
                    ORDER BY ct.c_date DESC", $media_id), ARRAY_A);

获取用户投票的评论:

$user_votes = $wpdb->get_results($wpdb->prepare("SELECT vote, comment_id
                    FROM $votes_table
                    WHERE user_id=%d", $user_id), ARRAY_A);

这两个都按预期工作。是否可以在一个查询中完成这些操作?(出于性能原因)

例如,将结果 user_vote = votes_table.vote 添加到 comment_table.id votes_table.user_id 投票。

mysql
  • 1 个回答
  • 37 Views
Martin Hope
user3052443
Asked: 2025-04-03 23:13:20 +0800 CST

mysql 偏移不适用于多个表

  • 4

给定像这样的表格设置

    tableA {
    id = 1
    name = 'bob'
    id = 2
    name = 'sally'
    id = 3
    name = 'sue'
    }
    tableB {
    id = 1
    name = 'bob'
    }

如果我运行此命令,它会返回 ID 2 和 3,正如我所希望的那样:

select id 
from tableA a 
left join tableB b using (id) 
where id not in (select id from tableB) 
order by id 
limit 10;

但这是一个非常大的表,所以我需要使用偏移量。当我尝试以下命令时,没有返回任何结果。

select id 
from tableA a 
left join tableB b using (id) 
where id not in (select id from tableB) 
order by id 
limit 10 offset 10;

使用连接时有没有办法使用偏移?

mysql
  • 1 个回答
  • 38 Views
Martin Hope
RomanKovalev
Asked: 2025-04-03 01:49:45 +0800 CST

MySQL Load数据语句转换Postgres字段

  • 5

我想将 csv 文件加载到 MySQL db 中。此文件包含一些 Postgres 字段格式的字段,例如布尔值为“t”。在 MySQL db 中,这些字段的布尔值也是 TINYINT(1) 类型。因此,我想要做的是在运行 LOAD DATA INFILE 语句时动态将 Postgres“t”转换为 1。

有办法做到这一点吗?还是我需要预处理文件才能在 SQL 中使用它?我需要处理的文件有点大,所以我想避免对其执行额外的文件操作。

LOAD DATA 
    INFILE '/load-data/photos.txt'
    INTO TABLE photos
    FIELDS TERMINATED BY '\t';
mysql
  • 1 个回答
  • 28 Views
Martin Hope
neubert
Asked: 2025-03-25 01:44:49 +0800 CST

不允许为生成的列 [whatever] 指定的值 [重复]

  • 5
此问题这里已有答案:
更新虚拟生成列 (2 个答案)
10 小时前关闭。

我有一张表 - Lead.Metadata- 其中有一个名为metaJSON 类型的列和一个生成的列:

cycle VARCHAR(255) AS (JSON_UNQUOTE(meta->"$.cycle"))

问题是当我这样做时UPDATE Lead.Metadata SET cycle = 'MONTHLY'出现此错误:

错误代码:3105。表“元数据”中生成的列“cycle”指定的值是不允许的。

我不明白。循环是一个VARCHAR(255)并且'MONTHLY'应该适合那里。

有什么想法吗?

(此外,请注意,代码库是遗留代码库;数据库结构不是最优的,但修复这个问题是一个更大的项目)

mysql
  • 2 个回答
  • 35 Views
Martin Hope
elbarna
Asked: 2025-03-08 14:35:15 +0800 CST

Mysql:可能存在“选择性”子字符串函数吗?

  • 6

情况就是这样

select calldate,src,dst,clid,nome from cdr limit 255 offset 1015;
+---------------------+------------+--------------+------------------------------------+------+
| calldate            | src        | dst          | clid                               | name |
+---------------------+------------+--------------+------------------------------------+------+
| 2025-03-04 04:49:59 | 1234567891 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 04:49:59 | 1234567891 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 04:49:59 | 1234567891 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 11:02:07 | 9812737374 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 11:02:05 | 9812737374 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 11:02:05 | 9812737374 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 11:31:53 | 9812737374 | +11123456789 | NONE                               | CKTC |
| 2025-03-04 16:22:08 | 3233333    | 9182374747   | NONE                               | CKTC |
| 2025-03-04 18:41:46 | 3233333    | 9182374747   | NONE                               | CKTC |
| 2025-03-08 01:11:27 | 3233333    | 9182374747   | NONE                               | CKTC |
+---------------------+------------+--------------+------------------------------------+------+

我想用空值替换 +11,简而言之:我想将其剪切掉但只替换 +11,而不触及其他值。

如果我用这行

select calldate,src,substr(dst,4,11) as dst,clid,nome from cdr limit 255 offset 1015;

它削减了所有值,而不仅仅是 +11

如果我用这个

select calldate,src,(select substr(dst,4,11) where dst='+11123456789') as dst,clid,nome from cdr limit 255 offset 1015;

工作正常,但其他数字的“dst”值变为NULL我的想法是这样的

select calldate,src,dst,clid,nome from cdr limit 255 offset 1015;
    +---------------------+------------+--------------+------------------------------------+------+
    | calldate            | src        | dst          | clid                               | name |
    +---------------------+------------+--------------+------------------------------------+------+
    | 2025-03-04 04:49:59 | 1234567891 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 04:49:59 | 1234567891 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 04:49:59 | 1234567891 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 11:02:07 | 9812737374 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 11:02:05 | 9812737374 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 11:02:05 | 9812737374 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 11:31:53 | 9812737374 | 123456789    | NONE                               | CKTC |
    | 2025-03-04 16:22:08 | 3233333    | 9182374747   | NONE                               | CKTC |
    | 2025-03-04 18:41:46 | 3233333    | 9182374747   | NONE                               | CKTC |
    | 2025-03-08 01:11:27 | 3233333    | 9182374747   | NONE                               | CKTC |
    +---------------------+------------+--------------+------------------------------------+------+

,怎么办?可能吗?

mysql
  • 1 个回答
  • 43 Views
Martin Hope
user2342558
Asked: 2025-03-08 00:18:52 +0800 CST

别名“as rows”在 MySQL 中不再有效[重复]

  • 4
这个问题已经有答案了:
由于在 MySQL 中使用保留字作为表名或列名而导致的语法错误 (1 个回答)
2 天前关闭。

我有这个查询,直到上个月为止都没有错误。

SELECT ..., (SELECT count(id) FROM table2) as rows FROM table1;

现在 MySQL 抛出这个错误:

语法错误或访问冲突:1064 您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在“rows [...]”附近使用的正确语法。

是因为rows成为了MySQL的保留字吗?

我在无法检查和/或控制的机器上运行查询,所以我不知道原因是否可能是软件更新。

mysql
  • 2 个回答
  • 32 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve