Forum: PC-Programmierung SQL-Abfrage erweitern


von bragol (Gast)


Lesenswert?

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

von Fabian O. (xfr)


Lesenswert?

Suchst Du vielleicht den UNION-Operator?

von temp (Gast)


Lesenswert?

Ich meine eher, er sollte es mal mit einem LEFT vor dem JOIN versuchen 
;)

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von bragol (Gast)


Lesenswert?

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)

von Nilix (Gast)


Lesenswert?

SELECT * from Tabellenname SL LEFT JOIN Tabelle SS ON SL.ISILONR = 
SS.SILONR AND cMatItemNr = '900001' AND SS.ScaleNr > 0

von bragol (Gast)


Lesenswert?

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

von bragol (Gast)


Lesenswert?

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)

von Fabian O. (xfr)


Lesenswert?

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 ...)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.