SQL-Abfrage erweitern

Gast #3072190
Hallo Forum,

ich möchte nachfolgene SQL-Anweisung

SELECT
   c.bezeichner,
   m.wert,
   m.code
FROM table1 m
JOIN table2 c
ON c.id = m.code

um weitere bezeichner erweitern, welche nicht in der table2 vorhanden 
sind.

Gibt es eine Möglichkeit, weitere c.id und c.bezeichner, direkt in der 
SQL-Abfrage mit anzugeben?

lg bragol
#3072367
was willst du? Ich glaub keiner von uns hat das verstanden.
willst du weitere spalten anzeigen, die in tabelle 1 vorhanden sind?
möchtest du neue Zeilen im Ergebnis der Abfrage?
willst du Zeilen aus Tabelle 1 existieren, die keine Links in Tabelle 2 
haben
Gast #3072439
Sorry für die missverständliche Problembeschreibung

Vlad Tepesch schrieb:
> willst du Zeilen aus Tabelle 1 existieren, die keine Links in Tabelle 2
> haben

genau das möchte ich erreichen.
In Tabelle 2 stehen die wichtigsten Bezeichner für die Codes aus Tabelle 
1.
Genau die werden mir mit der Select-Anweisung als Code und mit dem 
Klartextbezeichner angezeigt.

Unwichtigere (die, deren ID nicht in Tabelle 2 ist) werden nicht 
angezeigt.

Ich würde nun gern noch alle weiteren Codes aus Tabelle 1 angezeigt 
bekommen, wobei die Bezeichner hierfür nicht aus einer Tabelle gesucht 
werden sollen, sondern, falls möglich, aus einer Liste, welche in der 
SQL-Abfrage übergeben wird)
Gast #3073654
durch den LEFT JOIN in

SELECT
   c.bezeichner,
   m.wert,
   m.code
FROM table1 m
LEFT JOIN table2 c
ON c.id = m.code

erhalte ich nun die komplette Liste der Codes mit den Bezeichnern aus 
tabelle2, an den Stellen, wo

c.id = m.code

ist. An den übrigen Stellen, wo es keine Gleichheit zwischen c.id und 
m.code gibt steht [null]. An diesen Stellen würde ich gern abhängig von 
m.code ein JOIN nicht mit einer Tabelle, sondern mit einer in der 
SQL-Anweisung verpackten Parameterliste durchführen
Gast #3073822
ein Stück weiter bin ich gekommen mit:

SELECT
   c.bezeichner,
   m.wert,
   m.code,
   CASE m.code
      WHEN '31' THEN 'text1'
      WHEN '32' THEN 'text2'
      WHEN '33' THEN 'text3'
      ...
   END
FROM table1 m
LEFT JOIN table2 c
ON c.id = m.code

Dies fügt mir die Bezeichner (text1, text2 und text3) als zusätzliche 
Spalte ein.
Die Informationen sind nun alle da, leider noch auf 2 Spalten verteilt 
(CASE-Spalte und Spalte c.bezeichner)
#3073893
Dann vielleicht so?
1
SELECT
2
  CASE c.bezeichner IS NULL
3
    THEN
4
      CASE m.code
5
        WHEN '31' THEN 'text1'
6
        WHEN '32' THEN 'text2'
7
        WHEN '33' THEN 'text3'
8
        ...
9
      END
10
    ELSE c.bezeichner
11
  END AS bezeichner
12
  m.wert,
13
  m.code
14
FROM table1 m
15
LEFT JOIN table2 c
16
ON c.id = m.code

Oder eventuell so:
1
SELECT
2
  c2.bezeichner
3
  m.wert,
4
  m.code
5
FROM table1 m
6
LEFT JOIN (
7
  SELECT c.id, c.bezeichner FROM table2 c
8
  UNION SELECT '31', 'text1'
9
  UNION SELECT '32', 'text2'
10
  UNION SELECT '33', 'text3'
11
) AS c2
12
ON c2.id = m.code

(Beides nicht getestet ...)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.