所以我有这个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
为实现我所需要的任何帮助,将不胜感激。
答案 0 :(得分:1)
我了解您的要求是选择id
中的posts
:
这两个在cdlr_post_meta
中具有相应的记录,其中包含meta_key = 'statusCDLR'
和meta_value <> 1
或没有记录cdlr_post_meta
与meta_key = 'statusCDLR'
一种实现此目的的策略是使用LEFT JOIN
和cdlr_post_meta
在meta_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的一般说明:
在混合OR
和AND
时,您需要将测试表达式括在括号内,以避免遇到优先问题(AND
的优先级高于{{1 }}。
您应该使用显式OR
而不是隐式的。