Db2 查询以从同一列中具有相同值的所有表中进行选择

Db2 查询以从同一列中具有相同值的所有表中进行选择,db2,Db2,数据库被称为“学校”“学校”有带有“教室名称”的桌子,即“房间1”作为桌子,“房间2”作为另一个桌子,等等。每个“教室名称”都有一个“学生名称”列 我想选择所有“教室名称”,其中有一个名为“John”的“学生名称” 到目前为止,我只能从数据库中选择所有“教室名称”,例如: select * from syscat.tables 我建议如下。(尝试解决设计中的一些问题) 创建以下视图 CREATE OR REPLACE VIEW SCHOOL.STUDENT_LIST AS SEL

数据库被称为“学校”“学校”有带有“教室名称”的桌子,即“房间1”作为桌子,“房间2”作为另一个桌子,等等。每个“教室名称”都有一个“学生名称”列

我想选择所有“教室名称”,其中有一个名为“John”的“学生名称”

到目前为止,我只能从数据库中选择所有“教室名称”,例如:

  select * from syscat.tables

我建议如下。(尝试解决设计中的一些问题)

创建以下视图

 CREATE OR REPLACE VIEW SCHOOL.STUDENT_LIST AS
    SELECT 'Room1' as CLASSROOM, student_name FROM SCHOOL.Room1
      UNION ALL
    SELECT 'Room2' as CLASSROOM, student_name FROM SCHOOL.Room2
      UNION ALL
    SELECT 'Room3' as CLASSROOM, student_name FROM SCHOOL.Room3
      UNION ALL
    SELECT 'Room4' as CLASSROOM, student_name FROM SCHOOL.Room4
      UNION ALL
     -- etc
    SELECT 'RoomN' as CLASSROOM, student_name FROM SCHOOL.RoomN
现在你可以说

 SELECT CLASSROOM FROM STUDENT_LIST WHERE student_name = 'John'

您可以从DB2目录构建动态查询

db2 "select 'select ' || trim(tabname) || ' classroom, student_name from '
 || tabname || ' where student_name = ''John'';'
from syscat.tables
where tabname like 'room%'" | db2 +p -tv

最后一部分(db2+p-tv)允许执行输出。如果它不起作用(缓冲区大小),只需删除它,然后复制粘贴输出。

这是一个非常糟糕的数据库设计,没有简单的方法。问题是您的表名(即元数据)包含关系日期。我希望有一个单独的表,其中房间(房间名称或ID)和学生(学生名称或ID)之间的关系作为两列存在。