我的应用程序有几个表:一个主OBJECT表,以及几个用于存储特定种类对象的表:CAT,SHOE和BOOK.
这是表格列的外观:
object_id (primary key)
object_type (string)
Run Code Online (Sandbox Code Playgroud)
cat_id (primary key)
object_id (foreign key)
name (string)
color (string)
Run Code Online (Sandbox Code Playgroud)
shoe_id (primary key)
object_id (foreign key)
model (string)
size (string)
Run Code Online (Sandbox Code Playgroud)
book_id (primary key)
object_id (foreign key)
title (string)
author (string)
Run Code Online (Sandbox Code Playgroud)
从用户的角度来看,每个特定对象主要由其名称标识,该名称是每个表的不同列.对于CAT表它的名称,对于SHOE表它的模型,对于BOOK表它的标题.
假设我在没有事先知道它代表什么样的物体 - 猫,鞋子或书籍的情况下交给了object_id.如何编写SELECT语句来获取此信息?
显然它看起来有点像这样:
SELECT object_type,name FROM object WHERE object_id = 12345;
Run Code Online (Sandbox Code Playgroud)
但是如何在"名称"列中获得正确的内容?
您似乎在描述用户对数据的观点(对象具有名称,我不关心它们是什么类型)与您用于存储数据的模型不同的场景.
如果是这种情况,并假设您对数据库对象有一些控制权,我可能会创建一个VIEW,允许您为每种类型的对象合并类似的数据.
SQL Server上的示例:
CREATE VIEW object_names AS
SELECT object_id, name FROM cat
UNION ALL
SELECT object_id, model AS name FROM shoe
UNION ALL
SELECT object_id, title AS name FROM book
GO
Run Code Online (Sandbox Code Playgroud)
然后SELECT name FROM object_names WHERE object_id = 12345,您可以在不关心底层列名的情况下使用.
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |