【问题标题】:Join on a query returns more than one row加入查询返回多行
【发布时间】:2015-05-22 14:15:02
【问题描述】:

我有一个问题

SELECT id_anything FROM table1 JOIN table2 USING (id_tables)

现在,我的情况是:

如果该连接从 table2 返回两行,我想显示 table1 中的 id_anything(仅 1 行) 如果来自 table2 的连接返回 1 行,我想显示来自 table2 的 id_anything。

Ps:表 2 中的 id_anything 返回不同的值

示例数据: 表1

id_tables | id_anything
1         | 1

表2

id_tables | id_anything
1         | 10
1         | 100

预期返回:1

【问题讨论】:

  • 请添加一些示例数据(格式文本)和基于该数据的预期输出。
  • 我在问题上添加了

标签: postgresql join


【解决方案1】:

首先,获取您可能想要返回的值以及决定将哪个值一起返回到一行中的依据。

SELECT table1.id_tables, table1.id_anything AS table1_id, MIN(table2.id_anything) AS table2_id, COUNT(*)
  FROM table1 JOIN table2 USING (id_tables)
  GROUP BY table1.id_tables, table1.id_anything

您使用的聚合函数并不重要,因为您只会使用只有一个值的值。

然后您可以选择相关值:

WITH join_summary AS (
  SELECT table1.id_tables, table1.id_anything AS table1_id, MIN(table2.id_anything) AS table2_id, COUNT(*) AS match_count   
    FROM table1 JOIN table2 USING (id_tables)
    GROUP BY table1.id_tables, table1.id_anything
)
SELECT id_tables, CASE WHEN (match_count > 1) THEN table1_id ELSE table2_id END AS id_anything
  FROM join_summary

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多