Mam połączenie na dwóch tabelach zdefiniowane jako lewe sprzężenie zewnętrzne, tak że wszystkie rekordy są zwracane z tabeli po lewej stronie, nawet jeśli nie mają rekordu w prawej tabeli. Jednak muszę również umieścić klauzulę where na polu z prawej strony, ale ... Nadal chcę, aby rząd z lewego stołu był zwracany dla każdego rekordu w tabeli po lewej stronie, nawet jeśli warunek w klauzuli where nie jest spełniony. Czy jest sposób na zrobienie tego?Lewe połączenie zewnętrzne i dodatkowe, gdzie klauzula
Odpowiedz
Tak, postawić warunek (zwany predykatem) w warunkach przyłączenia
Select [stuff]
From TableA a
Left Join TableB b
On b.Pk = a.Pk
-- [Put your condition here, like this]
And b.Column = somevalue
Wystarczy umieścić predykat pod warunkiem JOIN
. Umieszczenie go w klauzuli WHERE
skutecznie przekształciłoby zapytanie w wewnętrzne sprzężenie.
Dla przykładu:
...
From a
Left Join b on a.id = b.id and b.condition = 'x'
SELECT x.fieldA, y.fieldB
FROM x
LEFT OUTER JOIN (select fieldb, fieldc from Y where condition = some_condition)
ON x.fieldc = y.fieldc
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t1.some_field = nvl(t2.some_field, t1.some_field)
UPD: eeee ... nie. w ten sposób:
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where some_required_value = nvl(t2.some_field, some_required_value)
nvl
jest składnia Oracle który zastępuje pierwszy argument z sekundę w przypadku jest null
(co jest wspólne dla sprzężenia zewnętrzne). Możesz użyć ifnull
lub coalesce
dla innych baz danych.
Tak więc, jeśli porównać t2.some_field
z podanych kryteriów, jeśli spełnił dołączyć orzeczenie, ale jeżeli nie ma, to po prostu powrót wiersz z table1
, ponieważ some_required_value
porównaniu będzie się zawsze być prawdą (chyba że jest null
jednak - null = null
plony null
, ani true
nie false
można używać
WHERE (right_table.column=value OR right_table.column IS NULL)
To zwróci wszystkie wiersze z tabeli 1 i tabeli 2, ale tylko trakt. re tabela 1 nie ma odpowiedniego wiersza w tabeli 2 lub odpowiedni wiersz w tabeli 2 odpowiada twoim kryteriom.
- 1. Czy lewe połączenia zewnętrzne i lewe łączenia są takie same?
- 2. LEWE ZEWNĘTRZNE DOŁĄCZ i NIE ISTNIEJĄ zapytanie
- 3. Lewe połączenie z klauzulą
- 4. Jak możemy odróżnić LEWE ZEWNĘTRZNE ŁĄCZENIE vs Łączenie lewe
- 5. Arel: Lewe sprzężenie zewnętrzne za pomocą symboli
- 6. MySQL Multiple Gdzie Klauzula
- 7. SQL: Gdzie Klauzula
- 8. Kolekcja Oracle gdzie klauzula
- 9. LINQ - zagnieżdżony gdzie klauzula
- 10. XPath gdzie klauzula
- 11. INNER JOIN Gdzie Klauzula
- 12. RavenDB - Opcjonalne, gdzie klauzula
- 13. Fluent NHibernate Gdzie Klauzula
- 14. Lewe sprzężenie zewnętrzne na dwóch plikach w unixie
- 15. Szyny zachłanne ładowanie i gdzie klauzula
- 16. SQL gdzie klauzula z LIKE i IN
- 17. Lewe połączenie, które zawsze zawiera puste rekordy
- 18. Co to jest POŁĄCZENIE LEWE w PostgreSQL
- 19. HQL, lewe połączenie na tym samym stole
- 20. Gdzie klauzula IN w LINQ
- 21. SQL Server: Dynamiczne gdzie klauzula
- 22. Postgres gdzie klauzula porównania timestamp
- 23. Postgresql Zawiera w gdzie klauzula
- 24. wstawić do wartości gdzie klauzula
- 25. nhibernate generuje lewe sprzężenie zewnętrzne w jednostce wiele do jednego
- 26. LINQ do SQL wielu tabel lewe zewnętrzne sprzężenie
- 27. Jak wykonać lewe sprzężenie zewnętrzne za pomocą metod rozszerzenie linq
- 28. problem podczas usuwania wiersze wykorzystujące lewe sprzężenie zewnętrzne w mysql
- 29. linq do encji, gdzie gdzie klauzula? (wewnętrzne gdzie)
- 30. jak wywołać procedurę przechowywaną, gdzie klauzula SQL
To nie działa na ECC6 –