Złączenie dwóch pól przy warunku "where"

0

Cześć,
mam taki problem że w jednej tabeli w polu mam zapis AAABBB i ten sam zapis w drugiej tabeli mam rozbity na dwa pola AAA i BBB.
Jak w selekcie zapisać warunek where żeby wyciągnąć te rekordy, które są zawarte w obu tabelach ?

Dzięki.

0

Możesz użyć funkcji substr. Mniej więcej tak:
from tab1, tab2 where substr(tab1.col, 0, 3) = tab2.col1 and substr(tab1.col, 3, 3) = tab2.col2

Choć ja osobiście do złączeń używałbym JOINów, jeśli chcesz tylko wiersze, gdzie wartości występują w obu tabelach to zapisałbym to:
from tab1 inner join tab2 on substr(tab1.col, 0, 3) = tab2.col1 and substr(tab1.col, 3, 3) = tab2.col2

Takie zapytanie może być jednak o wiele wolniejsze (przez drugie złączenie) ponieważ nie da się w nim wykorzystać indeksu na tab1.col

0

dzięki ! ;)

0

a nie prościej where t1.col = t2.col1 || t2.col2?

0

@abrakadaber O ile się nie mylę, to zapytanie sprawdza czy t1.col jest równe t2.col1 lub t2.col2.
Tymczasem pierwsze trzy znaki t1.col mają się równać t2.col1, a pozostałe 3 znaki mają się równać t2.col2. To zapytanie nie rozwiązuje problemu tu zadanego.

A tak nawiasem mówiąc, jak na mój gust to źle zaprojektowana jest baza, jeśli wymaga takich dziwnych kombinacji (choć mogę się mylić, z baz raczej średniak jestem :P).

Edit: Fakt, jeśli to wygląda tak jak zostało opisane (te napisy są, że tak powiem, nie nachodzą na siebie) to złączenie tych dwóch stringów będzie prostszym rozwiązaniem.

0

Dzięki za podpowiedzi.
Co do projektu bazy to problem dotyczy rachunku NRB, który w różnych tabelach jest w różny sposób prezentowany w zależności od tego co komu pasowało i było potrzebne. Stąd teraz takie kombinacje starając się połączyć dwie tabele z tym samym rachunkiem tylko inaczej pociętym.

Thx.

0
mk napisał(a):

Możesz użyć funkcji substr. Mniej więcej tak:
from tab1, tab2 where substr(tab1.col, 0, 3) = tab2.col1 and substr(tab1.col, 3, 3) = tab2.col2

Choć ja osobiście do złączeń używałbym JOINów, jeśli chcesz tylko wiersze, gdzie wartości występują w obu tabelach to zapisałbym to:
from tab1 inner join tab2 on substr(tab1.col, 0, 3) = tab2.col1 and substr(tab1.col, 3, 3) = tab2.col2

Takie zapytanie może być jednak o wiele wolniejsze (przez drugie złączenie) ponieważ nie da się w nim wykorzystać indeksu na tab1.col

Przecież jedno i drugie to dokładnie to samo. W tego typu przypadkach czy używasz where, czy join, na niższym poziomie dostajesz ten sam plan zapytania; wyłącznie kwestia gustu, którą opcję wybierzesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1