konto usunięte

Temat: JOIN / IF - prośba o pomoc

Czy w mysql jest w ogóle możliwe coś tego typu:

FROM tabela1 t
IF (t.kolumna = 0)
LEFT JOIN tabela2 t2 ON t2.id = t.id
ELSE
LEFT JOIN tabela3 t3 ON t3.id = t.id
END

a jeśli tak, to jak wyglądałoby poprawne zapytanie? To na pewno nie działa.
Z góry dziękuję wszystkim za pomoc.

konto usunięte

Temat: JOIN / IF - prośba o pomoc

Marek Syrek:
Czy w mysql jest w ogóle możliwe coś tego typu:

FROM tabela1 t
IF (t.kolumna = 0)
LEFT JOIN tabela2 t2 ON t2.id = t.id
ELSE
LEFT JOIN tabela3 t3 ON t3.id = t.id
END

a jeśli tak, to jak wyglądałoby poprawne zapytanie? To na pewno nie działa.
Z góry dziękuję wszystkim za pomoc.

Nie spotkałem się z takim czymś ;)

Tak na szybko, bez większych przemyśleń:

Może spróbuj UNION [ALL] i dodatkowy warunek w ON ( foo=foo1 AND foo > 100 )?

btw. Schemat masz na pewno sensowny? Może warto połączyć dane w jedną tabelę/widok ;)

R.Rafał Wardas edytował(a) ten post dnia 18.10.09 o godzinie 00:02

konto usunięte

Temat: JOIN / IF - prośba o pomoc

Marek Syrek:
Czy w mysql jest w ogóle możliwe coś tego typu:

FROM tabela1 t
IF (t.kolumna = 0)
LEFT JOIN tabela2 t2 ON t2.id = t.id
ELSE
LEFT JOIN tabela3 t3 ON t3.id = t.id
END

a jeśli tak, to jak wyglądałoby poprawne zapytanie? To na pewno nie działa.
Z góry dziękuję wszystkim za pomoc.


tak nigdy nie zadziała

select *, 0 as `marker` from tabela2
union all
select *, 1 as `marker` from tabela3

jak będziesz miał to w widoku to już masz z górki :)
Marcin Badtke

Marcin Badtke Administrator Baz
Danych, Citibank
Europe plc

Temat: JOIN / IF - prośba o pomoc

Marek Syrek:
FROM tabela1 t
IF (t.kolumna = 0)
LEFT JOIN tabela2 t2 ON t2.id = t.id
ELSE
LEFT JOIN tabela3 t3 ON t3.id = t.id
END

Warunkowy join moim zdaniem mało prawdopodobny. Optymalizator nie byłby w stanie opracować dobrego planu zapytania bo nie znałby wartości kolumny t.kolumna. Sugestia Przemka z 'union all' wydaje się najsensowniejsza.
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: JOIN / IF - prośba o pomoc

A może coś takiego? (nie testowałem)

select * from tabela1 t left join tabela2 t2 on (t2.id = t.id and t.kolumna = 0) left join tabela3 t3 on (t3.id = t.id and t.kolumna = 1);

konto usunięte

Temat: JOIN / IF - prośba o pomoc

Radosław Bułat:
A może coś takiego? (nie testowałem)

select * from tabela1 t left join tabela2 t2 on (t2.id = t.id and t.kolumna = 0) left join tabela3 t3 on (t3.id = t.id and t.kolumna = 1);

będziesz w zestawie wynikowym miał kolumny z wszystkich tabel wchodzących w skład zapytania, a to chyba nie o to chodzi
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: JOIN / IF - prośba o pomoc

Przemysław R.:
Radosław Bułat:
A może coś takiego? (nie testowałem)

select * from tabela1 t left join tabela2 t2 on (t2.id = t.id and t.kolumna = 0) left join tabela3 t3 on (t3.id = t.id and t.kolumna = 1);

będziesz w zestawie wynikowym miał kolumny z wszystkich tabel wchodzących w skład zapytania, a to chyba nie o to chodzi

No to sobie już wybierze te, które będzie chciał. Zakładam, że ma jakiś wspólny mianownik między tymi dwoma tabelami, inaczej takie łączenie nie miałoby sensu.

konto usunięte

Temat: JOIN / IF - prośba o pomoc

Radosław Bułat:
będziesz w zestawie wynikowym miał kolumny z wszystkich tabel wchodzących w skład zapytania, a to chyba nie o to chodzi

No to sobie już wybierze te, które będzie chciał. Zakładam, że ma jakiś wspólny mianownik między tymi dwoma tabelami, inaczej takie łączenie nie miałoby sensu.

masz tabelę 1 i tabelę 2, obie mają takie same kolumny
wynik takiego select-a to mniej więcej:

pole11, pole21, pole31, pole12, pole22, pole32

zaś zastosowanie left Joina sprawi tylko że niektóre wiersze będą miały null-e raz w jednej raz w drugiej części wiersza
a to nie chodzi o to



Wyślij zaproszenie do