Ich versuche, eine PostgreSQL-Abfrage zu konstruieren, die das Folgende tut, aber bis jetzt waren meine Bemühungen vergeblich.Zeile aus Tabelle auswählen und ein Feld durch eins aus einer anderen Spalte ersetzen, wenn es existiert
Problem: Es gibt zwei Tabellen: A und B. Ich mag würde alle Spalten aus Tabelle A wählen (mit Spalten: ID, Name, Beschreibung) und ersetzen die „A.name“ Spalte mit der Wert der Spalte "B.title" aus Tabelle B (mit Spalten: id, table_A_id title, langcode), wobei B.table_A_id 5 ist und B.langcode "nl" ist (wenn Zeilen vorhanden sind).
Meine Versuche:
SELECT A.name,
case when exists(select title from B where table_A_id = 5 and langcode= 'nl')
then B.title
else A.name
END
FROM A, B
WHERE A.id = 5 and B.table_A_id = 5 and B.langcode = 'nl'
-- second try:
SELECT COALESCE(B.title, A.name) as name
from A, B
where A.id = 5 and B.table_A_id = 5 and exists(select title from B where table_A_id = 5 and langcode= 'nl')
Ich habe versucht, eine CASE und COALESCE() mit gescheitert, aber aufgrund meiner Unerfahrenheit mit beiden Konzepten.
Vielen Dank im Voraus.
Nicht sehr klar. "Wenn nicht null", sagen Sie im Titel. Aber das Wort "null" erscheint nicht in der Erklärung. Du meinst "wenn es eine verwandte Zeile in der anderen Tabelle gibt"? "B.table_A_id ist 5": Das ist wirklich eine Konstante oder verweist auf den entsprechenden A.id-Wert? Ein Beispiel würde helfen – leonbloy
Möchten Sie nur den "B.title" subtrahieren, wenn "A.name" null ist? – rfusca
Ich habe den Titel bearbeitet und ein Beispiel hinzugefügt. Entschuldigung für die Verwirrung. B.table_A_id entspricht tatsächlich A.id. Und bezüglich der Ersetzung sollte A.name durch B.title ersetzt werden, wenn B.title mit den obigen WHERE-Bedingungen existiert. – EarthMind