当我事先不知道我想要哪些列时,如何编写SELECT语句?

Joh*_*don 1 sql

我的应用程序有几个表:一个主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)

但是如何在"名称"列中获得正确的内容?

Dan*_*n J 8

您似乎在描述用户对数据的观点(对象具有名称,我不关心它们是什么类型)与您用于存储数据的模型不同的场景.

如果是这种情况,并假设您对数据库对象有一些控制权,我可能会创建一个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,您可以在不关心底层列名的情况下使用.