2016-06-17 17 views
1

Ich habe eine Tabelle, die externe Daten verwendet, die abgeschnitten ankommt. Kann ich es aus Tabellen erstellen, die nicht abgeschnitten sind (da sie alternative externe Daten verwenden)?Abschließen von Text basierend auf einer anderen Tabelle

In diesem Beispiel können die zweite und dritte Zeile mit den übereinstimmenden Daten aus den entsprechenden Tabellen vervollständigt werden.

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

Was möchten Sie tun, wenn Sie "Eine lange Linie th" und "Eine lange Linie, die nicht abgeschnitten ist" oder "Eine lange Linie, die noch länger und nicht abgeschnitten ist" haben. als mögliche Übereinstimmungen? Wenn es nicht wichtig ist, können Sie einfach ein einfaches Update tun, wo 'source.Description wie dest.description + '%';' – Solarflare

+0

aussieht, wenn Typ A ist, greifen Sie Beschreibung aus Tabelle1 und Typ ist B Sie greifen Beschreibung aus Tabelle [ Projekt] (TableX, TableY) ist das richtig? –

+0

Ja, das stimmt. – LWC

Antwort

0

Um Zeilen zu vervollständigen, können Sie Beschreibung auswählen und aktualisieren.

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); 

Um ohne Aktualisierungstabelle wählen Sie können

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'; 

Und das kann vielleicht jemand helfen,

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

Vielleicht ist Ihr Table1.Description falsch ist.

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

Danke, aber Sie haben nicht erkannt, dass es nicht nur eine Beschreibung ist, sondern "Typ + Beschreibung" (der Typ war im Beispiel A & B). – LWC

0

versuchen so etwas wie dieses ...

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,"%") 

Wenn Sie Beschreibung sind versucht, passen Sie so etwas wie

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

verwenden können
+0

Können Sie bitte den Unterschied zwischen den 2 verschiedenen Codes erklären? Auch A & B sind nur Beispiele, der Typ ist ein dynamischer Wert, so dass eine manuelle Behandlung nicht hilft (plus es gibt auch Typ2 ...). Ich denke, ich kann es in beiden Tabellen zu "type | description" zusammenführen. – LWC

+0

Ich habe meinen Gedankengang vergessen ... check sqlfiddle und schau, ob es die Ergebnisse sind, die du willst. –

+0

Ihr gewünschtes Ergebnis ist seltsam und scheint von den Werten A und B abhängig zu sein, weil es eine halbe Beschreibung ist und es nur die kurze Beschreibung der Hälfte der Zeit ist. –

Verwandte Themen