SQL select用字符串替换整数

Cim*_*ity 18 sql database database-design

目标是使用数字表示的char值替换SQL查询中返回的整数值.例如:

标记为"Sport"的表属性定义为1-4之间的整数值.1 =篮球,2 =曲棍球等.下面是数据库表,然后是所需的输出.

数据库表:

Player     Team     Sport
--------------------------
Bob        Blue     1
Roy        Red      3
Sarah      Pink     4 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Player     Team     Sport
------------------------------
Bob        Blue     Basketball
Roy        Red      Soccer
Sarah      Pink     Kickball
Run Code Online (Sandbox Code Playgroud)

将这些整数值转换为String值的最佳做法是什么?使用SQL在传递给程序之前转换值?使用脚本语言来改变程序中的值?改变数据库设计?

Ale*_*nov 23

数据库应该保存这些值,您应该连接到另一个包含该数据的表.

所以你应该有一张桌子,上面写着一份人名单

ID名称FavSport
1 Alex 4
2 Gnats 2

然后另一张桌子上有一份运动清单

ID Sport
1 Basketball
2 Football
3 Soccer
4 Kickball

然后你会在这些表之间进行连接

select people.name, sports.sport 
from people, sports 
where people.favsport = sports.ID
Run Code Online (Sandbox Code Playgroud)

哪会让你回来

名称Sport
Alex Kickball
Gnat Football

您也可以使用案例陈述,例如.只需使用上面的人员表就可以写出类似的内容

select name, 
       case 
         when favsport = 1 then 'Basketball' 
         when favsport = 2 then 'Football' 
         when favsport = 3 then 'Soccer' 
         else 'Kickball' 
       end as "Sport" 
from people
Run Code Online (Sandbox Code Playgroud)

但这当然不是最佳做法.

  • 听起来不错。不幸的是,在这个项目中,我没有被赋予设计或更改数据库的能力。所以我可能不得不接受案例陈述。但是,连接表完全有意义。我实际上在用 PHP 做类似的事情,我创建了一个函数,我传递了属性名称和值。然后它检查我创建的索引数组以查找对应于什么值的字符串。所以本质上是一样的。感谢您的答复。 (2认同)
  • 您不必创建永久表。这将是最好的,但还有其他选择,具体取决于 DBMS。临时表、通用表表达式、表值构造函数。 (2认同)

小智 10

MySQL有一个CASE声明.以下适用于SQL Server:

SELECT
    CASE MyColumnName
        WHEN 1 THEN 'First'
        WHEN 2 THEN 'Second'
        WHEN 3 THEN 'Third'
        ELSE 'Other'
    END
Run Code Online (Sandbox Code Playgroud)