【发布时间】:2021-12-01 11:39:39
【问题描述】:
我有 2 个表,我想查询和显示数据差异:
CREATE TABLE order_splits_config (
id INT,
pair_id INT
);
CREATE TABLE active_pairs (
id INT,
pair VARCHAR(30),
exchange_active boolean,
exchange_id INT
);
INSERT INTO order_splits_config(id, pair_id)
VALUES (1, 83);
INSERT INTO order_splits_config(id, pair_id)
VALUES (2, 58);
INSERT INTO order_splits_config(id, pair_id)
VALUES (34, 34);
INSERT INTO active_pairs(id, pair, exchange_active, exchange_id)
VALUES (1, 'US/EN', true, 2);
INSERT INTO active_pairs(id, pair, exchange_active, exchange_id)
VALUES (2, 'GB/UK', true, 3);
INSERT INTO active_pairs(id, pair, exchange_active, exchange_id)
VALUES (2, 'FR/EU', true, 4);
我使用这个查询来查询差异:
SELECT b.id, b.pair, b.exchange_id
FROM order_splits_config a
FULL OUTER JOIN active_pairs b
ON a.pair_id = b.id
WHERE a.pair_id IS NULL
OR b.id IS NULL
AND b.exchange_active = 'true';
例如,这会打印很多这样的行(数据只是示例):
#,pair,id,exchange_id
1, US/EN,332,1
2, GB/UK,112,1
3, GB/UK,113,1
4, FR/EU,221,5
5, FR/EU,183,2
...
如何使用DISTINCT 来获取pair 唯一的查询结果?
【问题讨论】:
-
很高兴您提供了表定义、示例数据和查询。如果它们是可重现的(即没有明显的错误),那就太好了。
-
在
OR谓词的情况下,始终用括号对条件进行分组:1) 明确定义您想要AND的内容。 2)不要依赖默认的评估顺序,避免意外结果。当您在 where 子句中使用外连接表的某些列时(is null谓词除外),您将外连接转为内连接。 -
感谢您的建议。你能帮我解决这个问题吗?
-
说实话我是随机选择的。我不认为那个版本对这个问题很重要。
标签: sql postgresql duplicates postgresql-13