2017-02-05 1 views
0

У меня есть 2 таблицы, давайте назовем 'm Table-A и Table-B. Таблица A содержит таблицу привязки FK к таблице B. Мне больше не нужна таблица B, но мне нужно сохранить 1 столбец из таблицы-B. Итак, я хочу заменить все внешние ключи в таблице-A данными из одного столбца в ссылочной строке в таблице-B. Поэтому мне интересно, есть ли SQL-запрос, который я могу использовать для выполнения этого действия?SQL: как заменить столбец внешнего ключа данными из таблицы со ссылками?

Это просто простая база данных sqlite, если это имеет значение.

Для того, чтобы немного понятнее, вот 'иллюстрированный' пример:

Текущая ситуация:

TABLE-A: 
ID COL1 COL2 COL3(FK) 
------------------------------- 
1  text text 13 
2  text text 14 

TABLE-B: 
ID COL4 COL5 COL6 
------------------------------- 
13 rice sushi pizza 
14 pasta fries chips 

Wanted ситуация:

TABLE-A: 
ID COL1 COL2 COL3 
------------------------------- 
1  text text pizza 
2  text text chips 

ответ

1

Да. Это называется JOIN.

select 
    a.id, 
    a.col1, 
    a.col2, 
    b.col6 col3 
from tablea a join tableb b 
on a.col3 = b.id; 
+0

Спасибо за ответ, оцените это :) Однако, используя JOIN, это просто для отображения данных. Я хочу фактически переместить данные в базу данных. – Landcross

+1

Я не знаю, почему вы хотели бы это сделать, но одним из способов является создание новой таблицы и вставка вывода этого запроса соединения в эту таблицу. – GurV

+0

* facepalm * Почему я никогда не думал о создании новой таблицы для замены другие 2 ... Хорошо, я посмотрю, что я могу придумать. Относительно того, почему я хочу это сделать, чтобы сохранить длинную историю: база данных используется для крошечного веб-сайта, логика сайта изменилась, и часть данных теперь поступает из внешнего API, так что необходимо хранить локально больше. – Landcross

1

Если это всего лишь запрос, ответ GurV хорош. Если это то, что вы будете использовать много, то я предлагаю создать вид:

CREATE VIEW tablec AS 
SELECT a.id, a.col1, a.col2, b.col6 AS col3 
FROM tablea a, tableb b 
WHERE a.col3 = b.id 

(извините, я являюсь Oldschool SQL developper :))

А теперь просто использовать:

SELECT * FROM tablec 
+0

Спасибо за ответ :). Как я сказал GurV, я не хочу отображать данные, я хочу фактически переместить данные в базу данных. Я думаю, это было не совсем ясно в моем вопросе ... Он предложил мне создать третью базу данных на основе данных из JOIN вместо того, чтобы перемещать вещи вокруг. То, что я никогда не думал об этом варианте ... Ну, я думаю, я вернусь к разработке запроса ... – Landcross