2016-06-17 2 views
1

У меня есть таблица, в которой используются внешние данные, которые выходят из строя. Могу ли я завершить его из таблиц, которые не отключены (поскольку они используют альтернативные внешние данные)?Завершение написания текста на основе другой таблицы

В этом примере 2-я и 3-я строки могут быть заполнены с использованием соответствующих данных из соответствующих таблиц.

Table1: 
Table | Type | Description 
    X | A | A long line th 
    X | B | A long line th 
    Y | B | This line d 
    Y | A | This line d 

TableX: 
Type | Description 
    A | A very long line that doesn't get cut off 
    B | A long line that doesn't get cut off 

TableY: 
Type | Description 
    A | just a long line that doesn't get cut off 
    B | This line doesn't get cut off 

Needed result 
=============== 
Table1: 
Project | Type | Description 
    X | A | A long line th 
    X | B | A long line that doesn't get cut off 
    Y | B | This line doesn't get cut off 
    Y | A | This line d 
+0

Что вы хотите сделать, когда у вас есть «длинная строка» и «длинная линия, которая не отрезана» или «длинная линия, которая еще длиннее и не отрезана». как возможные совпадения? Если это не имеет значения, вы можете просто сделать простое обновление, где 'source.Description like dest.description + '%';' – Solarflare

+0

выглядит, если Type is A вы используете описание из Таблицы 1, а Type - это B, которое вы используете для описания из таблицы [ Project] (TableX, TableY), так? –

+0

Да, это так. – LWC

ответ

0

Для заполнения строк вы можете выбрать и обновить описание.

update Table1 set Description = (select Description from TableX where Description LIKE 'A long line th%' limit 1); 

update Table1 set Description = (select Description from TableY where Description LIKE 'This line d%' limit 1); 

Для выбора без таблицы можно

select tb1.Table as Proyect, tb1.Type, (select Description from TableX where Description like CONCAT(tb1.Description,'%')) from Table1 tb1 where tb1.Table = 'X' 
UNION 
select tb1.Table as Proyect, tb1.Type, (select Description from TableY where Description like CONCAT(tb1.Description,'%')) from Table1 tb1 where tb1.Table = 'Y'; 

обновление И это, возможно, может помочь кому-то,

INSERT INTO Table1 (
select 'X' as Project, Type, Description from Table1 
UNION 
select 'Y' as Project, Type, Description from Table2); 

Может быть, ваш Table1.Description неправильно.

ALTER TABLE Table1 MODIFY COLUMN Description varchar(200); 
+0

Спасибо, но вы не признали, что это не просто описание, а «Тип + описание» (Тип был A & B в примере). – LWC

0

попробовать что-то вроде этого ...

SELECT `Table` as Project,Type,Description 
FROM Table1 T1 WHERE Type = 'A' 
UNION ALL 
SELECT `Table`,T1.Type,T2.Description 
FROM Table1 T1 INNER JOIN TableX T2 
ON T1.`Table` = 'X' AND T1.Type = 'B' AND T1.Type = T2.Type 
UNION ALL 
SELECT `Table`,T1.Type,T2.Description 
FROM Table1 T1 INNER JOIN TableY T2 
ON T1.`Table` = 'Y' AND T1.Type = 'B' AND T1.Type = T2.Type 

http://www.sqlfiddle.com/#!9/b40a3/6

SELECT `Table` as Project,Type,Description 
FROM Table1 T1 WHERE Type = 'A' 
UNION ALL 
SELECT `Table`,T1.Type,T2.Description 
FROM Table1 T1 INNER JOIN TableX T2 
ON T1.`Table` = 'X' AND T1.Type = 'B' AND T1.Type = T2.Type 
AND T2.Description like CONCAT(T1.Description,"%") 
UNION ALL 
SELECT `Table`,T1.Type,T2.Description 
FROM Table1 T1 INNER JOIN TableY T2 
ON T1.`Table` = 'Y' AND T1.Type = 'B' AND T1.Type = T2.Type 
AND T2.Description like CONCAT(T1.Description,"%") 

Если вы пытаетесь соответствовать описание тоже можно использовать что-то вроде

http://www.sqlfiddle.com/#!9/b40a3/9

+0

Не могли бы вы объяснить разницу между двумя разными кодами? Кроме того, A & B - всего лишь примеры, тип - динамическое значение, поэтому ручное лечение не поможет (плюс есть также type2 ...). Наверное, я могу объединить его в обе таблицы, скажем, «type | description». – LWC

+0

Я забыл свой ход мысли ... проверьте sqlfiddle и посмотрите, не нужны ли результаты. –

+0

ваш требуемый результат странный и, похоже, зависит от значений A и B, потому что это длинное описание в половине случаев, и это краткое описание в полтора раза. –

Смежные вопросы