Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

AND Verknüpfung bei 2 Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von 7cookies, 10 Februar 2017.

  1. 7cookies

    7cookies Neuer Benutzer

    Hallo,

    ich bin wohl in eine Sackgasse gelaufen. Mir fehlt leider die Phantasie, die richtigen Suchbegriffe zu finden. Warscheinlich sehe ich den Wald vor lauter Bäumen gerade nicht.

    Ich habe 2 Tabellen:
    tabelle artikel:
    artikel.id (PRIMÄRSCHLÜSSEL)
    artikel.name

    tabelle attribute:
    attribute.id (PRIMÄRSCHLÜSSEL)
    attribute.text
    attribute.artikelid (Schlüssel des Artikels)

    Inhalt Artikel:
    1 | Testartikel
    2 | Neuer Artikel
    3 | Mein Artikel

    Nun gibt es 2 Attribute:
    1 | Hipp | 1
    2 | Hopp | 1


    Nun läuft die Suche so weit toll:
    Suche nach "Hipp Hopp" (oder Verknüpfung):

    select artikel.id from artikel, attribute where (attribute.text like "Hipp" or attribute.text like "Hopp") and attribute.artikelid = artikel.id group by artikel.id

    Ergebnis:
    Es wird Artikel 1 gefunden. So weit super!

    Nun versuche ich die UND-Verknüpfung und scheitere kläglich:

    select artikel.id from artikel, attribute where (attribute.text like "Hipp" and attribute.text like "Hopp") and attribute.artikelid = artikel.id group by artikel.id

    Das ergibt 0 Treffer und kann ja auch nicht funktionieren, weil ein Attribut ja nicht auf beides zutreffen kann.

    Bleibt hier nur ein subselect oder gibt es noch eine andere Form?

    Welche Suchbegriffe um hier im Forum eine Lösung zu finden sind die richtigen?


    Vielen Dank und liebe Grüße

    Sebastian
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# create table artikel(id int primary key, name text);
    CREATE TABLE
    test=*# create table attribute(id int primary key, t text, a_id int references artikel);
    CREATE TABLE
    test=*# insert into artikel values (1, 'testartikel');
    INSERT 0 1
    test=*# insert into artikel values (2, 'neuer artikel');
    INSERT 0 1
    test=*# insert into artikel values (3, 'mein artikel');
    INSERT 0 1
    test=*# insert into attribute values (1, 'hipp', 1);
    INSERT 0 1
    test=*# insert into attribute values (2, 'hopp', 1);
    INSERT 0 1
    test=*# select artikel.id, count(attribute.*) from artikel left join attribute on artikel.id=attribute.a_id where attribute.t in ('hipp','hopp') group by artikel.id having count(attribute.*) = 2;
     id | count
    ----+-------
      1 |  2
    (1 Zeile)
    
    Mit besseren Datenbanken wie z.B. PostgreSQL hättest Du weit bessere Möglichkeiten, das nur mal so....
     
  3. 7cookies

    7cookies Neuer Benutzer

    Hallo und vielen Dank.

    Man muss mit dem arbeiten, was man vorgesetzt bekommt.

    Den Join mit Count zu kombinieren, das war es.

    INTERSECT müsste auch gehen, wobei ich da erst ein Update auf MySQL 5.5 "anmahnen" müsste.
    Ich probiere das Montag Morgen gleich aus.

    Nochmal vielen Dank und liebe Grüße

    Sebastian
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Tja. Mein Beileid.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden