如果某个字段值出现在另一个表中,则从一个表中排除记录
Posted
技术标签:
【中文标题】如果某个字段值出现在另一个表中,则从一个表中排除记录【英文标题】:Exclude records from SELECT from one table if a certain field value appears in another table 【发布时间】:2016-09-24 02:01:20 【问题描述】:我真正想做的是识别所有 WordPress 帖子 ID(来自 wp_posts),其中在 wp_postmeta 中不存在 Yoast SEO 焦点关键字记录。这是问题的简化版本:
想要返回 T1.id 值 2,6 -- 即:仅 T1.id 的值等于 T2.fid,其中 T1.a = "2" 并且 T2.b 不等于 "3 ”。
尝试:
SELECT DISTINCT id FROM `T1` INNER JOIN `T2` ON `id` = `fid`
WHERE `a` = "2" AND NOT `b` = "3" ORDER BY ID ASC
这不起作用。无论是否包含“AND NOT 'b' = "3",都会返回相同的值。我正在尝试获取 'b' = "3" 条件以从返回的集合中消除 id。
有什么帮助吗?
谢谢!
【问题讨论】:
【参考方案1】:好的 - 我想我想通了。首先,发布的问题的答案是:
SELECT DISTINCT `id` FROM `T1` INNER JOIN `T2`
ON `id` = `fid`
WHERE `a` = "2"
AND `fid` NOT IN (SELECT `fid` FROM `T2` WHERE `b` = "3")
ORDER BY `id` ASC
对于您的 WordPress SEO,我的实际目标是获取所有未添加 Yoast SEO 关键字的已发布帖子的 URL(需要工作的帖子)。这似乎可以解决问题:
SELECT DISTINCT `ID`, CONCAT("http://mysite/",`post_name`) , `post_type`, `post_status`
FROM `wp_posts` INNER JOIN `wp_postmeta` ON `post_id` = `ID`
WHERE `post_type` = "post" AND `post_status` = "publish"
AND `post_id` NOT IN
(SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = "_yoast_wpseo_focuskw")
ORDER BY `ID` ASC
注意:该 URL 假定您的永久链接设置基于“帖子名称”。
如果您想检查“页面”或自定义帖子类型,只需将post_type
设置为适当的值。
【讨论】:
以上是关于如果某个字段值出现在另一个表中,则从一个表中排除记录的主要内容,如果未能解决你的问题,请参考以下文章