簡體   English   中英

SQL查詢不應返回數據透視表中包含空值的行

[英]SQL query should not return rows that contain null values in pivot table

我使用數據透視表創建了一個查詢,以提取一些元數據(從我的wordpress數據庫中)來獲取與帖子相關的緯度和經度值。 我只想返回具有這些特定的元數據片段的帖子,而忽略所有其他帖子,但是我無法過濾掉那些沒有值或這些元鍵的帖子。 這是我的SQL:

SELECT wp_posts.ID,   
wp_posts.post_title, wp_posts.post_modified_gmt,
MAX(CASE WHEN wp_postmeta.meta_key = "_wp_geo_longitude" then wp_postmeta.meta_value ELSE NULL END) as longitude,
MAX(CASE WHEN wp_postmeta.meta_key = "_wp_geo_latitude" then wp_postmeta.meta_value ELSE NULL END) as latitude
FROM wp_posts JOIN wp_postmeta  ON ( wp_postmeta.post_id = wp_posts.ID)  
WHERE wp_posts.post_status = 'publish'                  
GROUP BY wp_posts.ID, wp_posts.post_title;

我嘗試將以下內容添加到WHERE子句中,效果為零:

WHERE longitude IS NOT NULL
WHERE wp_postmeta.meta_value IS NOT NULL

以及它的變體,但無論空值如何,仍將返回所有帖子。

只需添加一個having子句:

having longitude is not null and latitude is not null

在這種情況下,透視的join方法可能更有效:

SELECT p.ID, p.post_title, p.post_modified_gmt,
       lng.meta_value as longitude, lat.meta_value as latitude
FROM wp_posts p JOIN
     wp_postmeta lat
     ON wp_postmeta.post_id = p.ID AND lat.meta_key = '_wp_geo_latiitude' JOIN
     wp_postmeta lng
     ON wp_postmeta.post_id = p.ID AND lng.meta_key = '_wp_geo_longitude'
WHERE p.post_status = 'publish';

通常,我更喜歡聚合方法而不是連接方法,因為它更靈活。 但是,您只得到兩個字段, 並且要確保兩個字段都存在。 這意味着在這種情況下,使用join的選項是非常合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM