Mysql 按缺少值筛选结果
我试图运行一个查询来更新WordPress wp_Posteta表中自定义字段的值。数据如下所示:Mysql 按缺少值筛选结果,mysql,sql,wordpress,Mysql,Sql,Wordpress,我试图运行一个查询来更新WordPress wp_Posteta表中自定义字段的值。数据如下所示: meta_id post_id meta_key meta_value ------- ------- ------- ---------- 1 1 start_date 2011-12-30 2 1 start_time
meta_id post_id meta_key meta_value
------- ------- ------- ----------
1 1 start_date 2011-12-30
2 1 start_time 21:00
3 363 start_date 2011-12-29
4 363 start_time 21:00
5 363 _start_timestamp 2011-12-29 21:00
我想做一个查询来添加一个记录,该记录的meta\u键
值为\u start\u timestamp
,它组合了给定post\u id的开始日期
和开始时间
的值,但仅在\u开始时间戳
尚未设置的情况下
在进入INSERT查询之前,我尝试获取一个SELECT查询,该查询将显示我想要的内容。我设法做了一个SELECT查询,返回定义了\u start\u timestamp
的post ID,但不知道如何获取未定义的post ID
这就是我所拥有的:
SELECT
a.post_id,
CONCAT(a.meta_value, ' ', b.meta_value),
c.meta_value
FROM
wp_postmeta a
INNER JOIN wp_postmeta b ON a.post_id=b.post_id
INNER JOIN wp_postmeta c ON a.post_id=c.post_id
WHERE
a.meta_key = 'start_date'
AND b.meta_key = 'start_time'
AND c.meta_key='_start_eventtimestamp'
这是回报
post_id CONCAT(a.meta_value, ' ', b.meta_value) meta_value
363 2011-12-29 21:00 2011-12-29 21:00
对于给定的post\u id
,meta\u key
列中不存在\u start\u timestamp
时,如何指定仅获取结果?在这种情况下,它应该只返回post\u id
1。尝试:
SELECT
a.post_id,
CONCAT(a.meta_value, ' ', b.meta_value),
c.meta_value
FROM
wp_postmeta a
INNER JOIN wp_postmeta b ON a.post_id=b.post_id
LEFT JOIN wp_postmeta c ON a.post_id=c.post_id AND
c.meta_key='_start_eventtimestamp'
WHERE
a.meta_key = 'start_date'
AND b.meta_key = 'start_time'
AND c.post_id is null
编辑:另一种方法:
SELECT post_id,
'_start_timestamp' as meta_key,
concat(max(case meta_key when 'start_date' then meta_value end), ' ',
max(case meta_key when 'start_time' then meta_value end)
) as meta_value
from wp_postmeta
group by post_id
having max(case meta_key when 'start_date' then meta_value end) is not null and
max(case meta_key when 'start_time' then meta_value end) is not null and
max(case meta_key when '_start_timestamp' then meta_value end) is null
就是这样!我只是好奇,有没有一个更简单的方法来完成这件事,或者从这两个连接中没有出路?这里是SQL的绝对新手…我为答案添加了另一种方法-它只访问表一次(因此在这方面更简单),但需要额外的
GROUPBY
和具有
子句-因此总体复杂性可能非常相似。