SQL select replace integer со строкой
Цель заключается в замене целочисленного значения, которое возвращается в SQL-запросе с помощью значения char, которое представляет число. Например:
Атрибут таблицы, обозначенный как "Спорт", определяется как целое число от 1 до 4. 1 = Баскетбол, 2 = Хоккей и т.д. Ниже приведена таблица базы данных, а затем желаемый результат.
Таблица базы данных
Player Team Sport
--------------------------
Bob Blue 1
Roy Red 3
Sarah Pink 4
Желаемые выходы:
Player Team Sport
------------------------------
Bob Blue Basketball
Roy Red Soccer
Sarah Pink Kickball
Что лучше всего перевести эти целочисленные значения для значений String? Использовать SQL для перевода значений до передачи в программу? Использовать язык сценариев для изменения значения внутри программы? Изменить структуру базы данных?
Ответы
Ответ 1
В базе данных должны храниться значения, и вы должны выполнить соединение с другой таблицей, в которой есть эти данные.
Итак, у вас должна быть таблица, которая говорит список людей
Идентификатор имени FavSport
1 Alex 4
2 Комары 2
А затем еще одна таблица со списком спортивных состязаний
ID Спорт
1 Баскетбол
2 Футбол
3 Футбол
4 Кикбол
Затем вы сделаете соединение между этими таблицами
select people.name, sports.sport
from people, sports
where people.favsport = sports.ID
который вернет вас назад
Название Спорт
Алекс Кикбол
Gnat Football
Вы также можете использовать оператор case, например. просто используя таблицу людей сверху, вы можете написать что-то вроде
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
Но это, конечно, не лучшая практика.
Ответ 2
MySQL имеет оператор CASE
. В SQL Server работает следующее:
SELECT
CASE MyColumnName
WHEN 1 THEN 'First'
WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
ELSE 'Other'
END
Ответ 3
В оракуле вы можете использовать функцию DECODE, которая обеспечит решение, в котором дизайн базы данных не поддается контролю.
![enter image description here]()
Непосредственно из оракула документация:
Пример: этот пример декодирует значение storage_id. Если storage_id равно 1, функция возвращает "Southlake"; если в файле warehouse_id указано значение 2, то возвращается "Сан-Франциско"; и так далее. Если имя_пакета не равно 1, 2, 3 или 4, функция возвращает "Non domestic".
SELECT product_id,
DECODE (warehouse_id, 1, 'Southlake',
2, 'San Francisco',
3, 'New Jersey',
4, 'Seattle',
'Non domestic') "Location"
FROM inventories
WHERE product_id < 1775
ORDER BY product_id, "Location";
Ответ 4
Выражение CASE
может помочь. Тем не менее, может быть даже быстрее иметь небольшую таблицу с первичным ключом int и строкой name
, например
1 baseball
2 football
и т.д. и JOIN
в соответствующем запросе.
Ответ 5
Как вы думаете, было бы полезно хранить эти отношения между целыми числами и строками в самой базе данных? Пока вы должны хранить эти отношения, имеет смысл хранить его близко к вашим данным (в базе данных), а не в вашем коде, где он может потеряться. Если вы используете это решение, это приведет к тому, что целое число будет иметь внешний ключ для значений в другой таблице. Вы сохраняете целые числа в другой таблице, скажем sports
, с sport_id
и sport
и присоединяйте их как часть вашего запроса.
Вместо SELECT * FROM my_table
вы бы SELECT * FROM my_table
и использовали соответствующее соединение. Если не каждая строка в вашем главном столбце имеет соответствующий вид спорта, вы можете использовать левое соединение, в противном случае выбирать из обеих таблиц и использовать = в предложении where, вероятно, достаточно.
Ответ 6
Определенно, в БД хранятся строковые значения. Я не эксперт по БД каким-либо образом, но я бы рекомендовал создать таблицу, содержащую строки и соответствующие им целочисленные значения. Оттуда вы можете определить взаимосвязь между двумя таблицами, а затем сделать JOIN в select, чтобы вывести строчную версию целого числа.
tblSport Columns
------------
SportID int (PK, eg. 12)
SportName varchar (eg. "Tennis")
tblFriend Columns
------------
FriendID int (PK)
FriendName (eg. "Joe")
LikesSportID (eg. 12)
In this example, you can get the following result from the query below:
SELECT FriendName, SportName
FROM tblFriend
INNER JOIN tblSport
ON tblFriend.LikesSportID = tblSport.SportID
Человек, это поздно. Надеюсь, я понял это правильно. Кстати, вы должны прочитать разные типы Joins - это самый простой пример.