Abfrage mit und ohne Bedingung

select ... from {table} t where t.{column_name} is null

Gruß frastr

der spannende Teil für mich ist ja, was Du mit Excel und MySQL dann machen willst, was in PostgreSQL nicht geht …

ich möchte niemanden zu den Orginaldaten Zugriff gewähren und so kann jeder in der Exceldatei seine gewünschten Infos einsehen.

@ frastr, mein Abfrage kommt mit der geschweiften Klammer nicht klar, ERROR: FEHLER: Syntaxfehler bei »{«
LINE 16: from {table,
^
SQL-Status: 42601
Zeichen: 698

wenn ich die normale Klammer verwende stört es sich am Komma nach table

diesen Teil sollst Du mit Deinem ganz realen SQL - Details, also Tabellenname, Spaltenname etc. ersetzen …

select … from tabellen (select.komplett) as t where Bedingungen
so hab ich es gemacht, eigentlich sind es doch nur 2 funktionierende Abfragen ich hab mehrere ähnliche am laufen aber bei diesem meckert das system am Beginn des inneren selects ERROR: FEHLER: Syntaxfehler bei »select«
LINE 21: select
^
SQL-Status: 42601
Zeichen: 430mit

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