如何计算 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 在不同表的列中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

计算不同单词在列中出现的次数 Oracle 12c SQL

如何从一个表中过滤出其 id 出现在另一个表的列中的记录

计算 PySpark SQL Join 中每个不同值在列中出现的次数

如何计算某些值在 SQL 表中出现的次数并在列中返回该数字?

如何获取列中每个不同值的计数? [复制]

如何计算某个meta_key在列中出现的meta_value的次数?