Announcement

Collapse
No announcement yet.

select * from ... INTERSECT Select * from ...

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

  • select * from ... INTERSECT Select * from ...

    Hallo, ich arbeite mit Interbase Version 4.1.0.194 und BDE und habe ein (wahrscheinlich) ziemlich banales Problem mit folgender SELECT-Klausel, in der erreichen möchte, daß bei Eingabe zweier Qualifikationen nur die Mitarbeiter erscheinen, die auch wirklich beide Quali's haben. Mit dem UNION ALL erhalte ich aber auch die Mitarbeiter, die lediglich eine Quali haben Nun habe ich gelesen, daß ich dieses mit einem INTERSECT erreichen kann - diese Klausel kennt Interbase aber anscheinend nicht. Was mach ich stattdessen?

    Select distinct personalnr, nachname, vorname, qualifikat FROM ":mand:PERSONAL", ":mandersqual", ":global:qualif"
    WHERE Personal.personalnr = persqual.personalnr AND persqual.qualschl = qualif.schluessel AND qualif.qualifikat LIKE [1Qualifikation1:]
    UNION ALL
    Select distinct personalnr, nachname, vorname, qualifikat FROM ":mand:PERSONAL", ":mandersqual", ":global:qualif"
    WHERE Personal.personalnr = persqual.personalnr AND persqual.qualschl = qualif.schluessel AND qualif.qualifikat LIKE [1Qualifikation2:]

  • #2
    Sorry, ich hab grad gesehen, daß meine Frage nicht grad sehr leserlich ist - bin das erste Mal hier und auch ansonsten ein blutiger Anfänger.Ich verspreche Besserun

    Comment


    • #3
      Warum mit union (logisches oder) tut es nicht ein

      Select distinct personalnr, nachname, vorname, qualifikat FROM ":mand:PERSONAL", ":mandersqual", ":global:qualif" WHERE Personal.personalnr = persqual.personalnr AND persqual.qualschl = qualif.schluessel AND

      qualif.qualifikat LIKE [1Qualifikation1:] and
      qualif.qualifikat LIKE [1Qualifikation2:

      Comment


      • #4
        Hi Andreas,
        ein einfaches AND tut es leider nicht. Hier ein kurzer Auszug aus den Datenbanken und den Tabellen:

        <B>DB MAND:</B><BR>
        Tabelle Personal:<p>

        personalnr nachname vorname<BR>
        123456 rehder sven<p>

        Tabelle Persqual:<p>
        personalnr qualschl<BR>
        123456 edv<BR>
        123456 isdn<BR>
        123456 telefon<p>

        <b>DB GLOBAL:</B><BR>
        Tabelle qualif:
        schluessel qualifikat<BR>
        edv Alleskönner<BR>
        isdn Remote Access<BR>
        telefon Bürohilfe<p>

        Wenn ich nun in den beiden Eingabefeldern 'Alleskönner' und 'Bürohilfe' eingebe, kriege ich logischerweise kein Ergebnis.
        Aber trotzdem erstmal Danke für die schnelle Antwort.

        Sve

        Comment


        • #5
          Hi Sven,
          <pre>
          select nachname, vorname
          from Personal
          where personalnr in
          (select A.personalnr
          from Persqual A, Qualif
          where A.qualschl=qualif and qualifikat='Alleskönner')
          and personalnr in
          (select A.personalnr
          from Persqual A, Qualif
          where A.qualschl=qualif and qualifikat='Bürohilfe')
          </pre>
          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hi Falk,

            ist ja gigantisch. Eigentlich ganz einfach, wenn man es erstmal liest. Vielen Dank

            Sve

            Comment


            • #7
              Hi Falk,

              wie ich Dir schon geschrieben habe, hast Du mir damit sehr weitergeholfen.<BR>
              Nur noch ein kleines, letztes Problem. Der Anwender soll ja die Qualifikation - wie im 1. Posting beschrieben - selbst eingeben.<BR>
              Diese Liste druckt er sich aus. Wenn er später dann den Ausdruck noch einmal durchliest, wäre es sinnvoll, wenn die von ihm eingegebenen Qualifikationen auch auf der Liste stehen.<BR>
              Gibt es nun eine Möglichkeit, daß die von ihm eingegebenen Wert wie z. B. 'Bürohilfe' in der dann erstellten Liste noch einmal für ihn sichtbar erscheinen?<BR>
              Ich hoffe, daß Du mir auch hier aushelfen kannst.<P>

              Gruß Sve

              Comment


              • #8
                Hi Sven,

                das einfachste wäre sicherlich mit Parametern zu arbeiten.
                <pre>
                select nachname, vorname, :Quali1 as Quali1, :Quali2 as Quali2
                from Personal
                where personalnr in
                (select A.personalnr
                from Persqual A, Qualif
                where A.qualschl=qualif and qualifikat=:Quali1)
                and personalnr in
                (select A.personalnr
                from Persqual A, Qualif
                where A.qualschl=qualif and qualifikat=:Quali2)
                </pre>
                Alternativ kannst du ja deine Hauptabfrage noch mit einem Join auf die entsprechenden Tabellen versehen.

                Gruß Fal
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Supersache und vielen Dank

                  Sve

                  Comment

                  Working...
                  X