mysql frage
kai
- datenbank
0 Arthur Dent0 Rouven0 kai0 Arthur Dent
hallo,
ich habe 2 mysql 4.0 tabellen.
in tab 1 stehen user:
USER_ID | NAME | DATA ...
5 | kai | toll
6 | gabi | supper
in tabelle 2 stehen nun zu jedem user beliebig viele
eigenschaften
USER_ID | EIGEN_ID
5 | 22
5 | 33
6 | 22
jetzt möchte ich mit einer anfrage alle user haben die:
die eigenschaft 22 UND 33 haben ...
ich bekomm das nicht hin und die tabellenstrucktur ist leider fix
gegeben ...
kann mir da einer helfen ?
danke
kai
hi,
ich habe 2 mysql 4.0 tabellen.
in tab 1 stehen user:
USER_ID | NAME | DATA ...
5 | kai | toll
6 | gabi | supperin tabelle 2 stehen nun zu jedem user beliebig viele
eigenschaften
USER_ID | EIGEN_ID
5 | 22
5 | 33
6 | 22
also wenn ich mich richtig an den ganzen SQL-Kram erinnere, dann sollte das so gehen:
select t1.NAME from tab1 t1, tab2 t2 where t1.USER_ID=t2.USER_ID and (t2.EIGEN_ID=22 OR t2.EIGEN_ID=33)
oder
select t1.NAME from tab1 t1 left join tab2 t2 on (t1.USER_ID=t2.USER_ID) where (t2.EIGEN_ID=22 OR t2.EIGEN_ID=33)
Gruß,
Arthur D.
Hello,
nope, das sind auch die, auf die nur eine der beiden Nummer zutrifft.
Diese Dinge sind immer etwas lästig zu lösen, wir hatten da vor ein paar Monaten schonmal eine längere Diskussion zu, es gibt je nach DBMS verschiedene Möglichkeiten das zu machen.
Erste Frage: Kann 5|33 mehrfach vorkommen oder ist USER_ID+EIGEN_ID eindeutig? Wenn ja, dann könnte eine GROUP BY + HAVING + COUNT-Lösung funktionieren.
[Ich würds ja gerne mit Subselect machen, aber ich glaub da streikt deine Datenbank]
SELECT t1.name, t1.user_id
FROM tab1 t1 INNER JOIN tab2 t2 ON t1.user_id = t2.user_id
WHERE t2.eigen_id = 22 OR t2.eigen_id = 33
GROUP BY t1.name, t1.user_id
HAVING COUNT(*) = 2
-> wir gucken also, ob wenn wir nach id und Namen zusammenfassen, der Nutzer zwei Treffer hatte.
MfG
Rouven
suppi,
vielen dank.
die idee mit dem count hatte ich auch aber ich dachte ich
würd die sache wieder zu komplie angehen ...
die typischen wirren gedanken die man nach einem 12h tag so hat.
vielen dank
kai
Hi,
nope, das sind auch die, auf die nur eine der beiden Nummer zutrifft.
ach ja, das "und" war so groß geschrieben, dass ich es glatt übersehen hab *g
Gruß,
Arthur D.