Это довольно массивный запрос.Поэтому нет смысла, когда кто-то отвечает вам на SO, чтобы переписать все для вас.
WordPress с его расширением WooCommerce использует паттерн key-value-store для хранения произвольных метаданных.Как вы обнаружили, для сохранения строк в результирующих наборах требуется некоторое изящество, когда некоторые метаданные отсутствуют.
Для этого вам нужно LEFT JOIN
.(Вы используете старый синтаксис с запятыми: вы устраиваете вечеринки, как будто это 1999 год.)
Вот пример, взятый из фрагмента вашего запроса.
Начните с таблицы, содержащей строкудля каждой строки, которую вы хотите в наборе результатов.В WordPress это, вероятно, будет wp_posts.
SELECT Z.post_id ...
FROM wp_posts Z
Затем начните объединять метаданные следующим образом
SELECT Z.postId, A.meta_value, ...
FROM wp_posts Z
LEFT JOIN wp_postmeta A ON Z.post_id = A.post_id AND A.meta_key = '_billing_first_name'
и продолжайте работать с этим шаблоном, пока вы не присоединитесь к каждому элементуметаданных, и вы будете веселиться, как будто это 2018.
Почему это работает?Потому что обычный JOIN (из которых запятое является разновидностью) подавляет строки из вашего набора результатов, которые не соответствуют условию JOIN.Но LEFT JOIN сохраняет эти строки и представляет значения NULL вместо отсутствующего значения.