mysql - 将一个表与另一表中的元数据合并

标签 mysql mysql-workbench

我正在尝试从两个表中组合所有结果。目前,我正在提出两个获得餐 table 的请求,但我相信有很多好的方法可以结合结果。我尝试过使用 join使用此查询

USE test;
SELECT * FROM main INNER JOIN main_meta ON main.id = main_meta.ref WHERE main.id = 1;

但最终得到了这样的重复数据:

<表类=“s-表”> <标题> id 正文 标题 时间 id 引用 数据 <正文> 1 祝你生日快乐! 生日庆典 2021-10-14 06:34:36 1 1 名字:ABC 1 祝你生日快乐! 生日庆典 2021-10-14 06:34:36 2 1 姓氏:DEF 1 祝你生日快乐! 生日庆典 2021-10-14 06:34:36 3 1 电子邮件:[email protected]

有一个主要条目将包含任意数量的元数据,因此主要帖子现在会重复多次。我想获取一次主要数据并在结果中获取多个元数据。

我正在寻找的结果是这样的:

<表类=“s-表”> <标题> id 正文 标题 时间 id 引用 数据 <正文> 1 祝你生日快乐! 生日庆典 2021-10-14 06:34:36 1 1 名字:ABC 2 1 姓氏:DEF 3 1 电子邮件:[email protected]

最佳答案

如果您不介意 data具有组合值的列,那么您可能需要考虑使用 GROUP_CONCAT() 。所以像这样的查询:

SELECT main.id, main.body, main.title, main.time, 
       GROUP_CONCAT(main_meta.data)
    FROM main 
INNER JOIN main_meta 
ON main.id = main_meta.ref 
WHERE main.id = 1
GROUP BY id, body, title, time;

..将返回如下结果:

<表类=“s-表”> <标题> id 正文 标题 时间 GROUP_CONCAT(main_meta.data) <正文> 1 祝你生日快乐! 生日庆典 2021-10-14 06:34:36 名字:ABC,姓氏:DEF,电子邮件:[email protected]

如果你想要data要分隔的列值(就像在您的问题编辑中一样),然后是此建议(适用于 MySQL v8+ 或 MariaDB v10.2+ 及更高版本):

SELECT CASE WHEN rn=1 THEN id ELSE '' END id,
       CASE WHEN rn=1 THEN body ELSE '' END body,
       CASE WHEN rn=1 THEN title ELSE '' END title,
       CASE WHEN rn=1 THEN time ELSE '' END time,
       data
 FROM
(SELECT main.id, main.body, main.title, main.time, main_meta.data, 
       ROW_NUMBER() OVER (PARTITION BY main.id ORDER BY main_meta.id) rn
    FROM main 
INNER JOIN main_meta 
ON main.id = main_meta.ref 
WHERE main.id = 1) v;

虽然这是可能的,但我不确定是否有任何理由这样做,除非它只是为了观看目的。如果最终结果要显示在网页上(例如用于 Web 报告 View ),那么最好在应用程序代码中执行第二个选项,而不是从 MySQL 查询中执行。

无论如何,这是一个 demo fiddle for reference

关于mysql - 将一个表与另一表中的元数据合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69564004/

相关文章:

java - Spring boot Bean异常: Cannot determine embedded database driver class for database type NONE

php - XAMPP MySQL 关闭

sql - 如何从 mysql 创建有界返回?

python pymysql.err.OperationalError : (2013, 'Lost connection to MySQL server during query' )

mysql - MySQL不允许远程连接

mysql - Union alternate 使查询更高效。 mysql

mySQL 查询未在 MySQL Workbench 中运行

mysql - 如何从 mysql 中的 mysql.slow_log 表中刷新数据?

MySQL 工作台 : how do I set up "ON UPDATE" and CURRENT_TIMESTAMP?

python - 我的 Flask 应用程序中的 "The view function did not return a valid response."错误在哪里?