SQL条件(如果不存在)

时间:2019-01-16 18:28:55

标签: mysql wordpress woocommerce

所以我有这个SQL查询:

SELECT 
    p.ID
FROM 
    `cdlr_posts` p, 
    cdlr_postmeta pm 
WHERE 
    pm.post_id=p.ID AND 
    `post_type` = 'shop_order' AND
    pm.meta_key = '_statusCDLR' AND
    pm.meta_value <> 1 
group by
    p.ID

我需要显示所有符合条件的IDS,但我还要显示不包含“ _statusCDLR” meta_key的IDS,但我没有碰到运气:

WHERE 
    pm.post_id=p.ID AND 
    `post_type` = 'shop_order' AND
    (pm.meta_key = '_statusCDLR' AND pm.meta_value <> 1 OR pm.meta_key <> '_statusCDLR') 
group by

为实现我所需要的任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我了解您的要求是选择id中的posts

  • 这两个cdlr_post_meta中具有相应的记录,其中包含meta_key = 'statusCDLR'meta_value <> 1

  • 没有记录cdlr_post_metameta_key = 'statusCDLR'

一种实现此目的的策略是使用LEFT JOINcdlr_post_metameta_key = 'statusCDLR'中搜索一条记录,然后在WHERE中实现其余逻辑子句(如果没有对应的记录,则pm的列都是NULL)。

SELECT p.ID
FROM cdlr_posts p
LEFT JOIN cdlr_postmeta pm 
    ON pm.post_id = p.ID AND pm.meta_key = '_statusCDLR'
WHERE 
    p.post_type = 'shop_order'
    AND ( pm.post_id IS NULL OR pm.meta_value <> 1 )
GROUP BY p.ID

PS-有关您的sql的一般说明:

  • 在混合ORAND时,您需要将测试表达式括在括号内,以避免遇到优先问题(AND的优先级高于{{1 }}。

  • 您应该使用显式OR而不是隐式的。