我有一个数据库充满了大量的“空”记录,我想摆脱那些孤儿记录。SQL - 在一个查询中同时选择“子”和“父”行
数据库是这样构成的;
- 包含真实项目(meta_value)
- 那就是 “链接” 到它的孩子父行(由它的meta_key)
一个子行 | meta_id post_id meta_key meta_value | | | | 011 301 ACF__P_01_01 Foo | | 012 309 _ACF__P_01_01 field_5874d5 | | 013 321 ACF__P_01_02 | | 014 316 _ACF__P_01_02 field_54290a | | 015 119 ACF__P_01_03 Bar | | 016 101 _ACF__P_01_03 field_a04a88 | | 017 119 ACF__P_01_03 | | 018 101 _ACF__P_01_03 field_a04a88 | | 019 149 ACF__P_01_03 | | 020 111 _ACF__P_01_03 field_a04a88 | | 021 169 ACF__P_01_03 Foo Bar | | 022 171 _ACF__P_01_03 field_a04a88 |
用这样的查询很容易选择所有(空)“子”行;
SELECT
*
FROM
wp_postmeta
WHERE
wp_postmeta.meta_key LIKE '%ACF__%'
AND
wp_postmeta.meta_value LIKE ''
但是,这个查询只提取(空)“子”行,而不是它们的“父”行。
有两个逻辑条件将父项绑定到子项;
- 的第一行永远是孩子,立即由其父随后。
- 父行具有相同的“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 field_54290a | | 017 119 ACF__P_01_03 | | 018 101 _ACF__P_01_03 field_a04a88 | | 019 149 ACF__P_01_03 | | 020 111 _ACF__P_01_03 field_a04a88 |
所以无论是空的,孩子的(在“meta_value”没有值)和它的父(两者具有相同的“meta_key”,这里的家长有下划线。
看起来像父行总是有一个meta_value,为什么不在你的where子句中使用它? 其中(wp_postmeta.meta_key LIKE '%ACF __%' AND wp_postmeta.meta_value LIKE '')或(wp_postmeta.meta_key LIKE '%ACF __%' AND wp_postmeta.meta_value <> '');然后根据您的喜好对输出进行排序 – iLikeMySql
您想要的结果如何(请给出上述问题中的数据示例)? –
你知道Navicat是否有共同的表格表达? –