2016-08-05 7 views
0

Ich bin auf einer genauen Bedingung fest.Mysql Abfrage maching genau ID (s) Array

Zum Beispiel mein Tisch ist

genre_id series_id 
1   1 
1   2 
2   5 
4   1 
2   4 
3   3 

ich bekommen genre_id wollen, die genau enthalten series_id .

So wird meine Abfrage zurückgeben nur genre_id nicht genre_id

Aber diese Abfrage

SELECT genre_id FROM test 
WHERE genre_id IN (1) 
GROUP BY series_id 
HAVING COUNT(*) = 1 

kehrt genre_id und

+0

Tisch (SHOW CREATE und kein Screenshot) Post zusammen mit den Reihen von Daten in Frage – e4c5

+0

Warum wählen Sie series_id, wenn Sie nach gener suchen e_id? Die Frage ist sowieso schwer zu verstehen, aber da Ihr Code und Ihre Beschreibung divergieren, wird es mehrdeutig. – Eiko

+0

Ich habe die SQL-Abfrage bearbeitet, ja, ich möchte genre_id zurückgeben. – user1338039

Antwort

-1

Scheint, wie Sie sind mit wr Ong Abfrage:

SELECT series_id FROM test WHERE genre_id IN (1) GROUP BY series_id HAVING COUNT(*) = 1 

Verwenden

SELECT genre_id FROM test WHERE series_id IN (1) GROUP BY genre_id HAVING COUNT(*) = 1 
0
/* 
drop table t; 
create table t (genre_id int, series_id int); 
insert into t values 
(1,   1), 
(1,   2), 
(2,   5), 
(4,   1), 
(2,   4), 
(3,   3); 
*/ 

select s.genre_id 
from 
(
select genre_id , max(series_id) maxsid 
from  t 
group  by genre_id 
) s 
where s.maxsid = 1; 

Ergebnis

+----------+ 
| genre_id | 
+----------+ 
|  4 | 
+----------+ 
+0

Dies ist zu spezifisch. Das heißt, nicht skalierbar. – Strawberry

+0

@strawberry - danke, nicht sicher, ich verstehe, was Sie damit meinen - gibt es eine Möglichkeit, dass Sie Ihre Gedanken mit mir auf dieser Website teilen können ?. –

+0

Nun, was ist, wenn das OP 'genau die Serien-IDs 1 & 2' wollte? – Strawberry

0
SELECT x.genre_id 
    FROM my_table x 
    LEFT 
    JOIN my_table y 
    ON y.genre_id = x.genre_id 
    AND y.series_id NOT IN(1) 
WHERE y.genre_id IS NULL 
GROUP 
    BY x.genre_id HAVING COUNT(*) = 1;