Abfrage mit und ohne Bedingung

seufz

was geht bisher, und was willst Du erreichen? Die Syntax von SELECT ist simpel:

test=*# \h select
Command:     SELECT
Description: retrieve rows from a table or view
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    [ * | expression [ [ AS ] output_name ] [, ...] ]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY grouping_element [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]

where from_item can be one of:

    [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
                [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ]
    [ LATERAL ] ( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
    with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    [ LATERAL ] function_name ( [ argument [, ...] ] )
                [ WITH ORDINALITY ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    [ LATERAL ] function_name ( [ argument [, ...] ] ) [ AS ] alias ( column_definition [, ...] )
    [ LATERAL ] function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
    [ LATERAL ] ROWS FROM( function_name ( [ argument [, ...] ] ) [ AS ( column_definition [, ...] ) ] [, ...] )
                [ WITH ORDINALITY ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]

and grouping_element can be one of:

    ( )
    expression
    ( expression [, ...] )
    ROLLUP ( { expression | ( expression [, ...] ) } [, ...] )
    CUBE ( { expression | ( expression [, ...] ) } [, ...] )
    GROUPING SETS ( grouping_element [, ...] )

and with_query is:

    with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( select | values | insert | update | delete )

TABLE [ ONLY ] table_name [ * ]

URL: https://www.postgresql.org/docs/12/sql-select.html

mit dem ersten select bekomme ich meine Daten mit Bedingung aus 2 anderen Tabellen, funktioniert
mit den anderen select bekomme ich alle Daten ohne die Daten aus dem Ersten aber mit dem Nullwert in einer Spalte
und die Zeilen mit dem Nullwert möchte ich auch in der Ersten Abfrage haben
die kann ich aber inder ersten Abfrage nicht direkt bekommen weil das Feld mit dem Nullwert dort nicht Null ist sondern auf die anderen beiden Tabellen verweist.

laut Syntax müßte meine Abfrage “select … from tabellen (1.select.komplett) as t where Bedingungen” stimmen aber igendwie muß sich doch ein Fehler plaziert haben

meine Glaskugel meint:

test=*# select val from foo;
 val 
-----
   1
   2
(2 rows)

test=*# select val from (select * from foo) as f where val = 1;
 val 
-----
   1
(1 row)

test=*# select val from tabellen (select * from foo) as f where val = 1;
ERROR:  syntax error at or near "select"
LINE 1: select val from tabellen (select * from foo) as f where val ...
                                  ^
test=*#

deine Glaskugel hat den Fall erkannt, aber kennt sie auch die Lösung?

ja, lies noch mal ALLES.

ich habs in alle Richtungen umgestellt ohne Erfolg

wir können nur raten, und die Glaskugel hat Urlaub. Das, was in meinem Beispiel einen Fehler ähnlich zu Deinem gab, lief ohne Fehler im Select davor.

das Problem ist dass ich bei einem select mit einem Feld auf eine zusätzliche Tabelle zugreife die beim 2.select nicht dabei sein darf.

Hallo simar,

ich verstehe dich nicht. Du möchtest das dir geholfen wird, warum kannst du da nicht einfach den Aufbau deiner relevanten Tabellen + deine Abfrage und Fehlermeldung hier posten? Du musst dazu ja nicht mal deine Daten preis geben.
Nur mit der Aussage:

ich habs in alle Richtungen umgestellt ohne Erfolg

kann man nichts anfangen. Wir wissen nicht wie es vorher war, wie es jetzt ist.
Wie soll man da helfen?

Gruß frastr

Eigentlich ganz einfach, ich möchte alles aus Tabelle 1 plus alles aus Tabelle 2 welche die Bedingung aus Tabelle 1 Spalte 1 erfüllt und die Bedingung aus Tabelle 1 Spalte 1 die diese Bedingungen, da dort nicht vorhanden, nicht erfüllt in einer Abfrage haben.
Habe etwas in einem anderen Forum von akretschmer mit einer array Anweisung gefunden das so ähnlich aussah kann es aber leider nicht umsetzen.
Also ich kanns nicht, dann bleibt mir nur ein Danke an euch für eure Tips bei diesem und bei meinen anderen Fragen und seh ein dass dieses hier nicht lösbar ist.

Allen ein gesundes und friedvolles Neues Jahr wünscht euch simar

So dringend kann’s ja dann auch nicht sein, wenn Du weder eine saubere, halbwegs eindeutige, textuelle Beschreibung noch eine handvoll vorher/nachher Daten “zu Papier” bringst.

Frohes, neues Jahr auch an Dich!

ich denke meine Frage ist “halbwegs eindeutige, textuelle Beschreibung” ansonsten hätte ich ja die Lösung
wie sollte ich es anderst formulieren?
select * from Tabelle1, tabelle2
where Tabelle1.Spalte1 = tabelle2.Spalte1
and tabelle1.Spalte1 not in Tabelle2
so verständlicher?

ich komme mir vor wie ein Bankkunde der einen Kredit braucht, ihn aber nur bekommt wenn er so viel hat dass er ihn eigentlich nicht bräuchte.

Das ist prinzipiell bei einer Bank so :wink:
Aber wir wissen wirklich nicht so genau, was du machst. Die Lösung können ein Union oder eine geänderte where-Bedingung oder ein anderer Join sein. Oder was ganz anderes. Solange wir dein SQL nicht sehen können wir ja nur raten.

Happy New Year allerseuts!
Uwe

Häufig ist es einfacher wenn Du uns ein paar Beispieldaten und Tabelledefinition zeigst - am Besten als CREATE TABLE und INSERT Statement, oder als Online Skript wie z.B. hier: https://dbfiddle.uk/?rdbms=postgres_12

Basierend auf den Beispieldaten sagst Du uns dann was das Resultat ist, welches Du erwartest. “Dummy-Statements” die nur Namen wie “tabelle1” oder “tabelle2” enthalten sind extrem schwierig zu verstehen.

Mein Problem ist gelöst, der Schlüssel war " left outer join" auf die Tabelle mit den Bedingungen

Nett, dass Du Bescheid sagst.

Aber:
Niemand hat Dein Problem verstanden und niemand kann mit der Lösung etwas anfangen.

Falls Du ein ernsthaftes Interesse daran hast, irgendwann mal zielgerichtet Hilfe zu erhalten, hier noch mal ein kleines Beispiel der Unmöglichkeit:

ich habs in alle Richtungen umgestellt ohne Erfolg

Weit jenseits von einem einzigen SQL Begriff: was sollen einem Deine Worte oben sagen. SQL kennt keine Richtungen, umstellen kann man die Uhr oder Möbel oder die Ernährung, allein auch hier merkt man, eine Idee wird zwar vermittelt, wie die Ernährung vor oder nach der Umstellung aussah oder wie sie verbessert werden könnte, weiß trotzdem niemand.

Magst in manchen Punkten recht haben, aber wie du sicherlich bemerkt hast bin ich nicht der sql-Profi sondern ein Laie und als solcher ist es mir nicht möglich mich in der von dir gewünschten Fachsprache auszudrücken sondern veruche mein Problem mit meinen Worten vermeintlich nachvollziehbar darzustellen.
Für viele der Profis hier mögen meine diversen Probleme und Fragen lächerlich sein, für mich sind es eben Stellen an denen ich nicht weiter weis und ich mir hier Hilfe erhoffe und aus vergangener Erfahrung auch erhalten habe.
Deshalb gilt mein Dank denen die mir trotz meiner laienhaften Fragestellungen weitergeholfen haben und es auch weiterhin versuchen.

Gruß simar

Es geht nicht um Lächerlichkeit oder Fachsprache. Mein Appell galt dem Bemühen, echte Informationen in einen Beitrag zu packen.
Ich kann auch umgekehrt nur um Verständnis bitten, einige sind einfach sehr bequem oder glauben, die “Experten” am anderen Ende des Internets seien irgendwie allwissend.
Das beliebte “es geht nicht” kann in der Praxis in viele verschiedene Ausprägungen aufgeteilt werden. Dazu gehört kein Expertentum.

  • es erscheint ein Fehler (Welcher?)
  • es erscheint kein Ergebnis (Was hätte es denn sein sollen?)
  • es erscheint ein unerwünschtes Ergebnis (Was hätte es denn sein sollen?)
  • es erscheint ein falsches Ergebnis (Was hätte es denn sein sollen?)
  • das System reagiert nicht / hängt (Wie lange?)
    usw.

Niemand kann das aus der Ferne raten geschweige denn wissen. Und die Mühe “es erscheint Fehler SQLERRM: relation ‘xyz’ already exists” ist nicht viel größer als “es geht nicht” zu schreiben. Selbst wenn man es abtippt statt es zu kopieren.

Im Idealfall ist schon die Eröffnung eines Threads im Forum, wo man sich damit auseinandersetzt, wie man sein Problem am verständlichsten und einfachsten beschreibt, ein erhellender Prozess für einen selbst. So geht es mir zumindest öfter, wenn ich selbst irgendwo Fragen an ein Forum richte.