gpt4 book ai didi

mysql - SQL - 在单个查询中同时选择 "child"和 "parent"行

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:48 25 4
gpt4 key购买 nike

我有一个充满大量“空”记录的数据库,我想摆脱那些孤立的记录。

数据库的结构是这样的;

  1. 包含真实条目(元值)的子行
  2. 父行“链接”到它的子行(通过它的 meta_key)


| meta_id post_id meta_key meta_value |
| |
| 011 301 ACF__P_01_01 富 |
| 012 309 _ACF__P_01_01 字段_5874d5 |
| 013 321 ACF__P_01_02 |
| 014 316 _ACF__P_01_02 字段_54290a |
| 015 119 ACF__P_01_03 酒吧 |
| 016 101 _ACF__P_01_03 字段_a04a88 |
| 017 119 ACF__P_01_03 |
| 018 101 _ACF__P_01_03 字段_a04a88 |
| 019 149 ACF__P_01_03 |
| 020 111 _ACF__P_01_03 字段_a04a88 |
| 021 169 ACF__P_01_03 富吧 |
| 022 171 _ACF__P_01_03 字段_a04a88 |


使用这样的查询很容易选择所有(空的)“子”行;

SELECT
*
FROM
wp_postmeta
WHERE
wp_postmeta.meta_key LIKE '%ACF__%'
AND
wp_postmeta.meta_value LIKE ''

但是这个查询只获取(空的)“子”行,而不是它们的“父”行。


有两个逻辑条件将父项绑定(bind)到子项;

  1. 第一行总是 child ,紧接着是它的 parent 。
  2. 父行与其子行具有相同的“meta_key”值,但使用下划线作为前缀

有什么方法可以创建一个 SQL 查询来选择空的子记录(就像我上面所做的那样)并且它也是父记录吗?

我更喜欢用一个查询来同时获取它们 - 但如果这不可能,我也可以运行两个查询(第一个获取父项,第二个获取空子项,我猜).

我使用 Navicat 来管理我的数据库,所以它必须是纯 SQL - 没有 PHP。


查询应该吐出这样的结果;



| meta_id post_id meta_key meta_value |
| |
| 013 321 ACF__P_01_02 |
| 014 316 _ACF__P_01_02 字段_54290a |
| 017 119 ACF__P_01_03 |
| 018 101 _ACF__P_01_03 字段_a04a88 |
| 019 149 ACF__P_01_03 |
| 020 111 _ACF__P_01_03 字段_a04a88 |


所以空子(“meta_value”中没有值)和它的父项(都有相同的“meta_key”,其中父项有下划线。

最佳答案

自连接

Select *
from wp_postmeta c
join wp_postmeta p
on p.meta_key = '_' + c.meta_key

以上只会获取“成对”的父子记录。如果有没有 child 的 parent 是可能的(我假设没有 parent 的 child 是不可能的),并且你想要所有的 parent ,包括没有 child 的 parent ,使用外部连接

Select *
from wp_postmeta p
left join wp_postmeta c
on '_' + c.meta_key = p.meta_key

在关系数据库中,没有“之后”或“之前”这样的概念,除非您自己定义它并将数据添加到实现该概念的表中(例如日期时间戳,或顺序递增的数字键,或其他任何东西)。没有此类工件、关系数据库表中的记录具有任何隐式顺序。

关于mysql - SQL - 在单个查询中同时选择 "child"和 "parent"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807503/

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