如何计算 ID 在不同表的列中出现的次数
Posted
技术标签:
【中文标题】如何计算 ID 在不同表的列中出现的次数【英文标题】:How to Count Times an ID Appears in a Column in a Different Table 【发布时间】:2020-01-23 21:19:50 【问题描述】:提前道歉:我确信这相对容易,并且被问到令人作呕,但我就是想不出正确的搜索。
基本上,我正在尝试获取从一个表中查询的 ID 列表,然后查看哪些 ID 不会出现在另一个表的单独列中。
这是一个 Wordpress mysql 数据库。作者通过元数据附加到帖子。作者和帖子都被视为用于数据库目的的帖子。有一张表包含两个帖子/作者:wp_posts
/wp
。还有另一个表包含附加到帖子/作者的元数据:wp_postmeta
/wm
。
我正在尝试从wp_posts
中获取作者列表,并通过检查wp_postmeta
中名为meta_value
的列来查看哪些是孤儿,即未附加到帖子中。
通过将来自 wp_posts
的作者 ID 显示在帖子的 wm.meta_value
列中,将作者与帖子相关联。但是作者本身是通过在同一列中具有 'author'
值来声明的。因此,ID 为17078
的作者将在wm.meta_value
中具有'author'
值,而归因于该作者的帖子将在wm.meta_value
中具有17078
。
通过返回我们数据库中的所有作者,以下查询让我走到了一半:
SELECT
post_title,
ID
FROM
wp_posts wp
JOIN
wp_postmeta wm
ON
wp.ID = wm.post_id
WHERE
wm.meta_value = 'author'
我需要以某种方式获取返回的列表并突出显示哪些 ID 未显示在所有帖子的 wm.meta_value
列中。任何建议或指导将不胜感激。
【问题讨论】:
我无法理解您需要查找的内容。您能否举例说明记录的情况以及预期的输出是什么? 【参考方案1】:下面你需要吗-
SELECT ID
FROM wp_postmeta wm
WHERE wm.meta_value = 'author'
AND NOT EXISTS (SELECT 1
FROM wp_postmeta wm2
WHERE wm2.ID = wm.ID)
【讨论】:
【参考方案2】:尝试这样的事情 (view on DB Fiddle):
WITH
authors AS (
SELECT post_id
FROM wp_postmeta wm
WHERE wm.meta_value = 'author'
),
posts AS (
SELECT post_id, (meta_value +0) AS author_id
FROM wp_postmeta wm
WHERE wm.meta_value <> 'author'
)
SELECT post_id
FROM authors
WHERE NOT EXISTS (
SELECT 1
FROM posts
WHERE authors.post_id = posts.author_id
);
【讨论】:
感谢您的帮助,可惜我们的 MySQL 版本仍然卡在 5.7【参考方案3】:感谢其他答案提供的提示,我最终提出的查询是:
SELECT
wm.post_id
FROM
wp_postmeta wm
WHERE
wm.meta_value = 'author'
AND NOT EXISTS (
SELECT 1
FROM wp_postmeta wm2
WHERE wm2.meta_key = '_author'
AND wm2.meta_value LIKE CONCAT('%"',wm.post_id,'"%')
)
【讨论】:
以上是关于如何计算 ID 在不同表的列中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章
计算 PySpark SQL Join 中每个不同值在列中出现的次数