【发布时间】:2015-12-28 19:37:52
【问题描述】:
我有一个数据库,其中每个对象属性都存储在单独的行中。附加的查询不会在 redshift 数据库中返回不同的值,但在任何 mysql 兼容数据库中进行测试时会按预期工作。
SELECT DISTINCT distinct_value
FROM
(
SELECT
uri,
( SELECT DISTINCT value_string
FROM `test_organization__app__testsegment` AS X
WHERE X.uri = parent.uri AND name = 'hasTestString' AND parent.value_string IS NOT NULL ) AS distinct_value
FROM `test_organization__app__testsegment` AS parent
WHERE
uri IN ( SELECT uri
FROM `test_organization__app__testsegment`
WHERE name = 'types' AND value_uri_multivalue = 'Document'
)
) AS T
WHERE distinct_value IS NOT NULL
ORDER BY distinct_value ASC
LIMIT 10000 OFFSET 0
【问题讨论】:
-
也许值看起来相同,但间距或字符集存在细微差别。
-
你能提供一个示例输出吗?我建议通过简化查询(例如删除条件和嵌套查询)来调查原因,直到
DISTINCT按预期工作。这可能会导致该行为的原因。 -
可能是 MySQL 数据库不区分大小写,而 Redshift 是。试试 lower(distinct_value) 看看是否可行。
-
感谢您的反馈,我今天回到了这个问题,它似乎是红移中的一个错误。我将使用模式、数据和示例查询来报告它。虽然上面的查询返回重复值,但用 COUNT 包装它并删除 order/limit/offset 元素会返回不同值的正确计数 - 真的很奇怪。 .知道 redshift 与 postgresql 部分兼容后,我对本地 postgresql 实例进行了相同的测试,结果很好。
-
截至 2017 年 3 月,这似乎仍然是 RedShift 中的一个错误。我在作为表的主键的整数字段上尝试了 SELECT DISTINCT,它带回了重复项。在某些表上它可以正常工作,但在其他表上 DISTINCT 根本不起作用,所以我不得不求助于 GROUP BY。
标签: sql amazon-redshift