【问题标题】:Joined tables single row with desired results具有所需结果的连接表单行
【发布时间】:2015-12-02 11:10:05
【问题描述】:

首先,我知道这是一个糟糕的设计案例,但我只是想知道如何从具有所需信息的关节中获得单个 sql 结果。

所以这是一个简单的例子,2个用id连接的表:

 TableA                   TableB

 id   code                id   tableA_id (FK)   start   end 
---- -------             ---- ---------------- ------- ------        
 1    codeA               1    2                NY      null
 2    codeB               2    2                null    LA

所以TableA 中的第 2 行在TableB 中有 2 行对应。

期望的结果:

 tableA_code   tableB_start   tableB_end
------------- -------------- ------------
 codeB         NY             LA

所以在结果中需要将表B中的2行归为一行并消除空值。

【问题讨论】:

  • 一个额外的自我加入,或者一个群组。
  • 是的 group by 将是答案
  • TableB 中的每个条目是否总是有两个条目TableA 中的每个条目?

标签: sql oracle join foreign-key-relationship


【解决方案1】:

查询:

select A.code, B1.start, B2.end
from TableB B1, TableB B2, TableA A
where B1.tableA_id = B2.tableA_id
and B1.tableA_id = A.id
and B1.start is not null and B2.end is not null

【讨论】:

  • 感谢 Thorynique 先生,它的简单和完美,甚至没有一个组 by
【解决方案2】:
Let me know if this works for you

SELECT A.code,
  MAX(B.STRT) STRT,
  MAX(B.END)
END
FROM
  (SELECT 1 AS A_ID,'CODE A' AS CODE FROM DUAL
  UNION ALL
  SELECT 2 AS A_ID,'CODE B' AS CODE FROM DUAL
  )A,
  (SELECT 1 AS B_ID,2 AS A_ID,'NY' STRT, NULL AS END FROM DUAL
UNION ALL
SELECT 2 AS B_ID,2 AS A_ID, NULL STRT, 'LA' AS END FROM DUAL
  )B
WHERE A.A_ID = B.A_ID
GROUP BY A.code;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多