情况如下--我有以下查询:
SELECT DISTINCT post_id FROM
(
(
SELECT DISTINCT rp.post_id, pm.meta_value AS premiere_date
FROM wp_related_people AS rp
JOIN wp_posts AS p ON rp.post_id = p.ID
JOIN wp_postmeta AS pm ON pm.post_id = p.ID
WHERE
rp.person_id = 494166 AND
rp.role = 'director' AND
pm.meta_key = 'htk_premiere_date'
)
UNION
(
SELECT DISTINCT rp.post_id, '' AS premiere_date
FROM wp_related_people AS rp
JOIN wp_posts AS p ON rp.post_id = p.ID
JOIN wp_postmeta AS pm ON pm.post_id = p.ID
WHERE
rp.person_id = 494166 AND
rp.role = 'director'
)
ORDER BY (premiere_date IS NULL), premiere_date DESC
) AS element_ids
上面的查询按照预期工作,但是,由于这两个内部选择非常相似,我想知道是否有一种方法将它们合并成一个查询?
下面是背景:这与一个WordPress数据库相关,该数据库使用自定义表进行扩展。我需要获得元素的I,按htk_premiere_date元键值排序。这个键及其值存储在具有以下列的wp_postmeta表中: meta_id (在这里不重要)、post_id、meta_key和meta_value。重点是,我需要按照以下模式对所有is进行排序:
非常感谢您的帮助!
发布于 2014-11-21 14:57:41
您的内部查询应该如下所示
SELECT DISTINCT
rp.post_id,
CASE
WHEN pm.meta_key = 'htk_premiere_date' THEN pm.meta_value
ELSE ''
END
AS premiere_date
FROM wp_related_people AS rp
JOIN wp_posts AS p ON rp.post_id = p.ID
JOIN wp_postmeta AS pm ON pm.post_id = p.ID
WHERE
rp.person_id = 494166 AND
rp.role = 'director'
参考文献
发布于 2014-11-21 14:39:36
在ANSI SQL中,DISTINCT在这里完全没有意义。UNION自动筛选副本:
test=# SELECT 1 UNION SELECT 1;
?column?
----------
1
(1 row)
工会和工会之间存在着明显的区别:
test=# SELECT 1 UNION ALL SELECT 1;
?column?
----------
1
1
(2 rows)
在您的例子中,第二个子subselect永远不能拥有与第一个(由于空列)相同的行,所以UNION在这里已经很好了(保存一个无意义的复制过滤器)。
https://dba.stackexchange.com/questions/83294
复制相似问题