Я понимаю, что вы должны выбрать id
из posts
, чтобы:
либо имели соответствующую запись в cdlr_post_meta
с [ 114] и meta_value <> 1
или не имеют записи cdlr_post_meta
с meta_key = 'statusCDLR'
A Стратегия для достижения этой цели заключается в использовании 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
имеет более высокий приоритет, чем OR
).
Вы должны использовать явные JOIN
вместо неявных.
См. Последовательность поиска команд в Microsoft Technet
Каждая из переменных среды PATH и PATHEXT представляет собой элемент последовательности поиска: PATH - упорядоченный список каталоги «, где » искать, а PATHEXT - упорядоченный список расширений файлов (« что ») для поиска (в случае, если расширение явно не указано в командной строке ). Однако перед использованием PATH выполняется поиск в текущем каталоге.
По умолчанию переменная PATHEXT имеет значение ".COM; .EXE; .BAT; .CMD"
.Я считаю, что он проходит через% PATHEXT% и пробует каждый из них