我有一個數據庫充滿了大量的「空」記錄,我想擺脫那些孤兒記錄。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是否有共同的表格表達? –