gpt4 book ai didi

mysql - 在 MySQL : selecting publications on keyword but including all keywords in results

转载 作者:行者123 更新时间:2023-11-29 03:18:23 24 4
gpt4 key购买 nike

发布表如下所示:

publications
============
id title etc ...

关键字表如下所示:

keywords
========
id name etc ...

keywords_relations 表创建出版物和关键字之间的关系,作为外键,其中 pid 指向 publications.id,kid 指向 keywords.id。

keyword_relations
=================
pid kid

在 MySQL 中,我构造了以下查询:

SELECT publications.*,
GROUP_CONCAT(keywords.name SEPARATOR ', ') AS keywords
FROM publications
LEFT JOIN keyword_relations
INNER JOIN keywords
ON keyword_relations.kid = keywords.id
ON keyword_relations.pid = publications.id
WHERE keywords.id = 1
GROUP BY publications.id
ORDER BY publications.date DESC;

我正在选择 keywords.id 上的出版物。但是,在结果列表中的“关键字”列只返回选定的关键字。我希望“关键字”列包含由此产生的所有可用关键字。

如果我删除 WHERE 行,我会得到一个列表,其中“关键字”列包含该结果的所有可用关键字。

我怎样才能既选择关键字又在结果中包含所有关键字?

最佳答案

使用 HAVING 子句而不是 WHERE:

SELECT p.*,
GROUP_CONCAT(k.name SEPARATOR ', ') AS keywords
FROM publications p LEFT JOIN
keyword_relations kr
ON kr.pid = p.id INNER JOIN
keywords k
ON kr.kid = k.id
GROUP BY p.id
HAVING SUM(k.id = 1) > 0
ORDER BY p.date DESC;

注意事项:

  • HAVING 子句计算符合条件的关键字数量。 > 0 表示有一个。
  • 表别名使查询更易于编写和阅读。
  • ON 子句应该紧跟在表格之后。 JOIN 语法的目的之一是将连接条件放在表引用的旁边,而不是放在查询的最下方。

关于mysql - 在 MySQL : selecting publications on keyword but including all keywords in results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50289504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com