2016-11-01 4 views
0

ich diese Tabellen haben:das Ergebnis von zwei Abfragen in MySQL Kombinieren

User(idUser, name...) 
Group(idGroup, name, ...) 

Und ein assoziatives Tisch, sie zu beziehen:

UserIsInGroup(idGroup, idUser...) 

ich eine Abfrage gemacht, dass die IDs aller Gruppen bringt in dem der gesuchte Benutzer erscheint.

select group.name, group.idGroup from Group 
join UserIsInGroup 
on group.idGroup = UserIsInGroup.idGroup 
where UserIsInGroup.idUser = 1; /*User #1*/ 

select group.name, group.idGroup from Group 
join UserIsInGroup 
on group.idGroup = UserIsInGroup.idGroup 
where UserIsInGroup.idUser = 2; /*User #2*/ 

Offensichtlich bringt beide Abfragen eine andere Ergebnisliste, aber sie haben ein gemeinsames Ergebnis, das ich nehmen möchte.

Also möchte ich etwas wie auswählen (Ergebnisse in Abfrage # 1, die auch in Abfrage # 2 sind), aber ich habe keine Ahnung, wie das geht.

Ich hoffe, Sie können mir helfen, vielen Dank.

+0

Ich schätze, Ihre Tabelle wird nicht wirklich Gruppe – Strawberry

+0

genannt. Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an -mcve-for-was-scheint-zu-mir-eine-sehr-einfache-sql-Abfrage – Strawberry

Antwort

0

da ich nicht genug reputation habe um zu kommentieren schreibe ich das als antwort. was ist mit Schnittmengen? EDIT: diese Lösung nicht für MySQL ist (ich darüber vergessen, wenn ich diese Antwort schrieb) Aber ich werde es lassen sich hier nur für den Fall

select group.name, group.idGroup from Group 
    join UserIsInGroup 
    on group.idGroup = UserIsInGroup.idGroup 
    where UserIsInGroup.idUser = 1; /*User #1*/ 
    INTERSECTS 
    select group.name, group.idGroup from Group 
join UserIsInGroup 
on group.idGroup = UserIsInGroup.idGroup 
where UserIsInGroup.idUser = 2; /*User #2*/ 

i eine Antwort mit dieser Lösung sah geschrieben, aber anscheinend, Es wurde gelöscht.

Eine Alternative:

Sie INNER JOIN als Ersatz für intersects verwenden können, testete ich es aus und es scheint zu funktionieren: Beachten Sie, dass jeder einen Alias ​​auswählen geben muss, die ich in diesem Fall nur verwendet Buchstaben

Inner Join gibt alle Zeilen in den zwei Abfragen zurück, die Spalten gemeinsam haben. Ich hoffe, das hilft oder zumindest gibt Ihnen eine Idee

+0

Danke für die Antwort. Ich hatte diese Operation bis jetzt nicht benutzt, also kam mir das nicht in den Sinn. Offenbar INTERSECT existiert nicht in mysql, aber man könnte es als wählen simulieren * aus Tabelle wo [Bedingung] und exists (select * from Tabelle wo [Zustand]) https: //www.techonthenet .com/mysql/intersect.php Anyway Es funktioniert nicht für mich aus irgendeinem Grund, ich muss etwas falsch machen. Ich musste temporäre Tabellen verwenden, um die Ergebnisse für die ursprünglichen Abfragen zu speichern und sie dann zu verbinden. Das ist der einzige Weg, den ich gefunden habe. – Quique

+0

Entschuldigung, ich war in Eile und habe das komplett vergessen, ich denke ich habe eine andere Lösung, ich werde meine Antwort bearbeiten – nachomendi

Verwandte Themen