SQL子查询返回空值行

时间:2017-05-16 19:54:55

标签: mysql sql

我一直在努力为woocommerce整理一个SQL查询,它可以抓取并组织woocommerce_order_itemmeta表中的所有数据。

我根据用于获取重力形式哈希值的类似查询拼凑了以下内容:

SELECT order_item_id AS entryId,
    (
        SELECT meta_value
        FROM wp_woocommerce_order_itemmeta
        WHERE meta_key = 'Name'
            AND order_item_id = entryId LIMIT 1
        ) AS 'Full Name',
    (
        SELECT meta_value
        FROM wp_woocommerce_order_itemmeta
        WHERE meta_key = 'Email'
            AND order_item_id = entryId LIMIT 1
        ) AS 'User Email',
    (
        SELECT meta_value
        FROM wp_woocommerce_order_itemmeta
        WHERE meta_key = 'Address'
            AND order_item_id = entryId LIMIT 1
        ) AS 'User Address'
FROM wp_woocommerce_order_itemmeta
WHERE meta_value IS NOT NULL
GROUP BY entryId
ORDER BY entryId

似乎运行良好。我通过My​​SQL运行它,我得到了我需要的结果,但我还得到了许多行,只有NULL值。

有没有办法使用上述查询过滤掉仅NULL值的行?

1 个答案:

答案 0 :(得分:0)

我可能会弄错,但也许像这样的结构会更好地满足你的需求。

SELECT oim.order_item_id AS entryId
   , GROUP_CONCAT(DISTINCT CASE meta_key WHEN "Name" THEN meta_value ELSE NULL END) AS `Full Name`
   , GROUP_CONCAT(DISTINCT CASE meta_key WHEN "Email" THEN meta_value ELSE NULL END) AS `User Email`
   [, etc....]
FROM wp_woocommerce_order_itemmeta AS oim
GROUP BY entryId
ORDER BY entryId
;
与大多数聚合函数一样,

GROUP_CONCAT忽略空值(仅当遇到的所有值都为null时,结果才变为null)。

过滤掉完全无效的结果;您正在寻找HAVING