SQL Abfrage: Suche nach 2 bestimmten Personen

  • Hi,
     
    ich habe ein Problem mit einer Suchabfrage.
     
     
    Query – Anforderung:
    Ich möchte Bilder suchen, auf denen zwei BESTIMMTE Person ALLEINE auf dem Bild sind (nur diese 2 Personen!).


    Ich bekommen den Query einfach nicht hin :oops:


    Kann mir da bitte jemand weiter helfen?

    Danke

    Lg

  • Hi, also so sollt es gehen:


    SELECT Y.*
    FROM bilder AS Y
    INNER JOIN
    (
    SELECT bild
    FROM bildpersonen AS A
    INNER JOIN personen AS B ON
    (
    (A.person = B.ukey) AND
    (B.caption = 'Person_1')
    )
    ) AS P1 ON (Y.ukey = P1.bild)
    INNER JOIN
    (
    SELECT bild
    FROM bildpersonen AS A
    INNER JOIN personen AS B ON
    (
    (A.person = B.ukey) AND
    (B.caption = 'Person_2')
    )
    ) AS P2 ON (Y.ukey = P2.bild)
    INNER JOIN
    (
    SELECT
    bild,
    (COUNT(*)) AS "personen_anzahl"
    FROM bildpersonen AS A
    INNER JOIN personen AS B ON
    (
    (A.person = B.ukey) AND
    (B.caption IN ('Person_1', 'Person_2'))
    )
    GROUP BY 1
    HAVING (personen_anzahl = 2)
    ) AS Z ON (Y.ukey = Z.bild);


    Einschränkung: Du musst natürlich alle Personen auf einem Bild zugeordnet haben.


    lg
    Robert

  • SQL Abfrage: Suche nach 2 bestimmten Personen


    Hi,


    ich muss die Frage leider noch mal stellen bzw. aufrollen.
    Irgendwie funktioniert der Query nicht.

    Hab jetzt versucht, selber einen Query zu machen -> Microsoft SQL Server Management Studio funktioniert der Query auch, aber im Imabas kommt der Fehler
    „Das Feld ‚caption‘ wurde nicht gefunden“


    select b.ukey from bilder b
    INNER JOIN bildpersonen ON b.ukey = bildpersonen.bild
    where b.ukey in
    (
    select b.ukey from bilder
    INNER JOIN bildpersonen ON b.ukey = bildpersonen.bild
    INNER JOIN personen ON personen.ukey = bildpersonen.person
    where
    personen.caption like '%person1%'
    or
    personen.caption like '%person2%'
    )
    GROUP BY b.ukey HAVING ((Count( b.ukey))=2);



    Was mache ich falsch? :?:



    Danke

    Lg

  • Dein Script liefert bei mir eine Liste mit uKeys zurück!


    Sowohl im SQL Server Management Studio als auch im Imabas Datenbank Query Browser...


    Ich habe SQL Server 2008 R2 Express im Einsatz.


    /b!

  • Also ich habe das so gelöst
    1. Folgenden Code als Benutzerabfrage anlegen (damit kannst du angeben, wie viele Personen auf deinem Bild sein sollen)


    SQL
    1. SELECT * FROM bilder INNER JOIN bildpersonen ON bilder.ukey = bildpersonen.bild
    2. GROUP BY bilder.ukey HAVING (((Count(bilder.ukey))=@text; Anzahl angeben:@));

    2. Diese Benutzerabfrage zusammen mit deinen gewünschen (beiden) Personen im Explorer markieren und dann per "Suche UND-verknüpft" ausgeben lassen (findest du im Menü "markierte Elemente").


    Das funtioniert super!


    Gruß
    Dirk

  • Hi,


    die Bilder mit einer gewissen Anzahl der Personen finde ich mit diesem Query:


    SELECT B.* FROM BILDER B WHERE B.UKEY IN
    (
    SELECT BILDER.UKEY FROM BILDER
    INNER JOIN BILDPERSONEN ON BILDER.UKEY = BILDPERSONEN.BILD
    GROUP BY BILDER.UKEY HAVING (((COUNT(BILDER.UKEY))=@TEXT Anzahl der Personen angeben:@))
    )



    Weiß jemand, wie ich jetzt noch nach einer bestimmten Person suchen kann?
    D.h: Ich suche nach Bildern mit 7 Personen (siehe Query oben) in denen aber die Person ‚X‘ vorkommen soll?
    Mit einer einfachen Auswahl der Person im Explorer mit einer „Markierten Elemente“ „Suche UND Verknüpfung“ bekomme ich leider einen

    Incorrect syntax near the keyword ‚select‘


    Fehler!

    Hat jemand eine Idee?

    lg