Alejandro: Select Ausgabe von zwei Textfeldern, aber jeweils nur eines ausgeben

Ich habe gesehen hier gibt es ausser html auch viele mysql Fragen. Ich habe auch eine, vielleicht kann sie jemand helfen zu lösen.

SELECT id,namen1,namen2 FROM adress WHERE namen1 = 10 OR namen2 = 10

als Ausgabe bekomme ich dann

1!10!12 2!10!13 3!10!14 4!15!10 5!16!10 5!17!10 5!18!10

mich interessieren aber nur die Ergbenisse in dem zweiten Namensfeld, in dem nicht die 10 ist.

Diese möchte ich mir ausgeben lassen.

1!12 2!13 3!14 4!15 5!16 5!17 5!18

Aber mir fällt keine Lösung dazu ein.

  1. Tach!

    mich interessieren aber nur die Ergbenisse in dem zweiten Namensfeld, in dem nicht die 10 ist.

    Die Query ist bereits soweit richtig, dass sie genau die gewünschten Datensätze ergiebt, und das Problem ist nur noch, welche Daten davon angezeigt werden sollen? Dann hilft die IF()-Funktion, um Entscheidungen zu treffen.

    dedlfix.

    1. Hallo dedlfix,

      ich finde UNION besser als IF. Das ist klarer und voll allem indexierbar. Ein OR im WHERE führt oft dazu, dass ein Index nicht benutzt wird (zumindest habe ich das vor vielen Jahren mal so gelernt).

      SELECT id,namen1 as namen FROM adress WHERE namen2 = 10 UNION SELECT id,namen2 as namen FROM adress WHERE namen1 = 10 ORDER BY id, namen

      Edit: Korrigiert nach Hinweis von Tom

      Der ORDER BY am Ende sorgt dafür, dass das Ergebnis nach ID sortiert ist. Ansonsten hättest Du zuerst alle Sätze mit namen1=10 und danach alle Sätze mit namen2=10.

      Rolf

      -- sumpsi - posui - clusi
      1. Hello,

        ich finde UNION besser als IF.

        Müsste es nicht trotzdem

        SELECT id,namen1 as namen FROM adress WHERE namen2 = 10 UNION SELECT id,namen2 as namen FROM adress WHERE namen1 = 10 ORDER BY id, namen

        heißen, um die Anforderung des OP zu erfüllen?

        Glück Auf
        Tom vom Berg

        -- Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Hust

          Räusper. Hm. Weißgarnichtwasdumeinst

          Danke.