【问题标题】:What should the correct query for this problem?这个问题的正确查询应该是什么?
【发布时间】:2019-01-30 01:52:34
【问题描述】:

伙计们,我有一个问题,我有 4 个表格要总结一下。

这个数据库在PostgreSQL上,模型关系是继承

表 1:(人)

id: character
name: character    
last_name:character    
age: character

表 2:学生(从 Person 继承)

id: character (imported from person)         
name: character (imported from person)        
last_name:character (imported from person)        
age: character (imported from person)    
college: character    
courses: character

TABLE3:老师(从 Person 继承)

id: character (imported from person)        
name: character (imported from person)        
last_name:character (imported from person)        
age: character (imported from person)    
license: integer    
date_empl: date
years_working: integer

我希望通过单个查询,获取代码所属的两个表之一的所有信息。

我做不到

SELECT *
FROM STUDENT
WHERE ID = {{whatever}}

因为是静态的,我想在另一个表中搜索(ID {{whatever}}

我试过了

SELECT *
FROM STUDENT
WHERE ID = {{whatever}}

UNION ALL

SELECT *
FROM TEACHER
WHERE ID = {{whatever}}

但它不起作用,因为UNION 需要在 2 个表中具有相同数量的列

我怎样才能通过一个查询获得一个人的详细信息,无论是教授还是学生?或者我可以通过什么方式做到这一点?

【问题讨论】:

  • “继承”是什么意思? Postgress 是否支持对象表?或者它只是一个传统的关系数据库?那么,所有 3 个表都存在吗?或者 Person 表是一个抽象的“模板”而不是一个表?

标签: sql database postgresql union where-clause


【解决方案1】:

使用UNION 是一种解决方案。当列不同时,您可以在输出中生成几列,并在它们不可用的记录中用NULL 填充它们。

SELECT id, name, last_name, age, college, courses, null, null FROM student
UNION ALL
SELECT id, name, last_name, age, null, null, license, date_empl FROM teacher

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 2011-09-29
    • 2011-10-13
    • 2019-11-14
    • 2010-09-07
    • 2010-10-04
    相关资源
    最近更新 更多