我正在尝试从两个表中组合所有结果。目前,我正在提出两个获得餐 table 的请求,但我相信有很多好的方法可以结合结果。我尝试过使用 join
使用此查询
USE test;
SELECT * FROM main INNER JOIN main_meta ON main.id = main_meta.ref WHERE main.id = 1;
但最终得到了这样的重复数据:
有一个主要条目将包含任意数量的元数据,因此主要帖子现在会重复多次。我想获取一次主要数据并在结果中获取多个元数据。
我正在寻找的结果是这样的:
最佳答案
如果您不介意 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;
..将返回如下结果:
如果你想要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/