Announcement

Collapse
No announcement yet.

Knifflige Query

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Knifflige Query

    Hallo,
    ich bin gerade am Hirnen, wie ich folgendes bewerkstelligen kann:

    Gegeben ist eine Menge von (geordneten) Elementen e1,e2,...,en und eine (kommutative) Verknüpfung v(ei,ej) =v(ej,ei) = {0,1}. Eine SQL-Query liefert mir nun alle Paare, für die v=1 gilt.

    Also z.B:

    SELECT e1,e2 FROM v

    e1 e2
    1 2
    2 1
    2 4
    4 2

    Ich hätte jetzt aber gerne eine Query außenrum gebaut, die n^2-mal 0 bzw. 1 liefert, so dass man, wenn man das Ergebnis in eine nxn-Matrix (zeilen- oder spaltenweise,egal) umwandelt, man aus der Matrix sofort lesen kann, ob für die Verknüpfung ei mit ej (bzw. umgekehrt, was ja egal ist) den Wert 0 oder 1 liefert.

    also 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0,

    als Matrix

    0 1 0 0
    1 0 0 1
    0 0 0 0
    0 1 0 0

    Es dünkt mir irgendwie, dass man das ganze mit einem OUTER JOIN erreichen kann, um das Ergebnis mit Nullen füllen zu können.

    Leider ist es aus Komplexitätsgründen nicht möglich, eine zweite Query zu erstellen, die die Pärchen mit v=0 liefert.

    Nach Möglichkeit sollte die gesuchte Query auch kein IF enthalten.

    Wer kann helfen?

    Danke und Gruß,
    mssqler
    Zuletzt editiert von mssqler; 23.01.2008, 18:58.

  • #2
    Originally posted by mssqler View Post
    Hallo,
    ich bin gerade am Hirnen, wie ich folgendes bewerkstelligen kann:

    Gegeben ist eine Menge von (geordneten) Elementen e1,e2,...,en und eine (kommutative) Verknüpfung v(ei,ej) =v(ej,ei) = {0,1}. Eine SQL-Query liefert mir nun alle Paare, für die v=1 gilt.

    Also z.B:

    SELECT e1,e2 FROM v

    e1 e2
    1 2
    2 1
    2 4
    4 2

    Ich hätte jetzt aber gerne eine Query außenrum gebaut, die n^2-mal 0 bzw. 1 liefert, so dass man, wenn man das Ergebnis in eine nxn-Matrix (zeilen- oder spaltenweise,egal) umwandelt, man aus der Matrix sofort lesen kann, ob für die Verknüpfung ei mit ej (bzw. umgekehrt, was ja egal ist) den Wert 0 oder 1 liefert.

    also 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0,

    als Matrix

    0 1 0 0
    1 0 0 1
    0 0 0 0
    0 1 0 0

    Es dünkt mir irgendwie, dass man das ganze mit einem OUTER JOIN erreichen kann, um das Ergebnis mit Nullen füllen zu können.

    Leider ist es aus Komplexitätsgründen nicht möglich, eine zweite Query zu erstellen, die die Pärchen mit v=0 liefert.

    Nach Möglichkeit sollte die gesuchte Query auch kein IF enthalten.

    Wer kann helfen?

    Danke und Gruß,
    mssqler
    Nochmals drüber geschlafen, läßt sich nun das Problem auf folgendes reduzieren:

    Man erhält aus einer Query diejenigen Elemente, die eine bestimmte Eigenschaft besitzen (z.B. die Primzahlen von 1 bis 10), also 2 3 5 7. Ziel ist es jetzt, für alle Elemente eine Query in der Art

    Element hatEigenschaft
    1 0
    2 1
    3 1
    4 0
    5 1
    6 0
    7 1
    8 0
    9 0
    10 0

    zu erzeugen.

    Kann man eigentlich ohne Kontrollanweisungen eine Query erzeugen, die die Zahlen 1 bis 10 zeilenweise ausgibt?

    Danke und Gruß,
    mssqler

    Comment


    • #3
      Originally posted by mssqler View Post
      Nochmals drüber geschlafen, läßt sich nun das Problem auf folgendes reduzieren:

      Man erhält aus einer Query diejenigen Elemente, die eine bestimmte Eigenschaft besitzen (z.B. die Primzahlen von 1 bis 10), also 2 3 5 7. Ziel ist es jetzt, für alle Elemente eine Query in der Art

      Element hatEigenschaft
      1 0
      2 1
      3 1
      4 0
      5 1
      6 0
      7 1
      8 0
      9 0
      10 0

      zu erzeugen.

      Kann man eigentlich ohne Kontrollanweisungen eine Query erzeugen, die die Zahlen 1 bis 10 zeilenweise ausgibt?

      Danke und Gruß,
      mssqler
      Hallo,

      bisher habe ich hier im Forum immer die passenden Lösungen zu meinen Problemen gefunden, und das hat mich als SQL-Anfänger weit gebracht.

      Deswegen versuche ich mein letztes Problem, das bisher unbeantwortet blieb, noch einmal umzuformulieren:

      Nehmen wir an, es existiert eine Tabelle mit
      Spalte1 = id
      Spalte2 = wert
      auf die ich direkt keinen Zugriff habe, sondern deren "Interface" über zwei Queries definiert ist:

      SELECT id FROM tabelle

      und

      SELECT id,wert FROM tabelle WHERE wert=1

      Ich möchte nun die ursprüngliche Tabelle, besser gesagt das Ergebnis einer Query

      SELECT wert FROM tabelle

      rekonstruieren, wobei mir wie gesagt nur die beiden obengenannten Queries wohl dann als Subqueries zur Verfügung stehen.

      Und die Lösung auf die ich gekommen bin:

      SELECT coalesce(sq.wert,0) FROM tabelle t LEFT OUTER JOIN (SELECT id,wert FROM tabelle WHERE wert=1) sq ON t.id = sq.id

      Yuhee!

      Danke für Eure Aufmerksamkeit
      mssqler

      Comment

      Working...
      X