[sql] Query wil niet lukken

Pagina: 1
Acties:

  • b19a
  • Registratie: September 2002
  • Niet online
Ik heb de volgende tabellen:

Album
id
name

Category
id
name

Albums_Categories
album_id
category_id

Waarbij Albums_Categories de join-table is tussen Album en Category (many-many). Nu wil ik bijvoorbeeld alle Albums selecteren die in Category 1 en 2 zitten opvragen. En dus niet alleen in 1 van beiden. Wat voor SQL query moet ik hiervoor opstellen (ik gebruik MySQL).

Wat heb ik al geprobeerd:

Union -> combineer meerdere resulaten, niet wat ik wil

SELECT * FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) WHERE category_id IN ( 1, 2 )
Geeft me albums in 1 of 2, maar ik wil 1 en 2.

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Je hebt dezelfde veldnamen voorkomen, dus gebruik een alias hiervoor.

March of the Eagles


  • b19a
  • Registratie: September 2002
  • Niet online
Hacku schreef op zondag 22 januari 2006 @ 18:26:
Je hebt dezelfde veldnamen voorkomen, dus gebruik een alias hiervoor.
Je hebt denk ik niet goed gelezen dat dat het probleem niet is? Ik gebruik de hele Category tabel verder niet bij de query die ik wil hebben, dus een alias voor een veld (id en name) gebruiken is dan ook niet nodig.

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
code:
1
2
3
4
5
6
7
8
9
SELECT
    *
FROM
    albums AS a1, albums AS a2,
    Albums_Categories AS ac1, Albums_Categories AS ac2
WHERE
    a1.id = ac1.album_id AND a2.id = ac2.album_id AND 
    a1.id = a2.id AND
    a1.category_id = 1 AND a2.category_id = 2

Verwijderd

code:
1
2
3
4
5
6
SELECT * FROM 
`albums` LEFT JOIN albums_categories ...
where category_id  in 
(select album_id from `albums_categories` cat where cat.id = 1 
    INTERSECT
select album_id from `albums_categories` cat where cat.id = 2 )


lukt dit?

  • Orion84
  • Registratie: April 2002
  • Laatst online: 22:30

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Intersect ipv union ;)

union neemt de vereniging van albums uit cat 1 en albums uit cat 2, intersect neemt albums die in beide cats zitten.

SQL:
1
2
3
4
5
(SELECT * FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
 WHERE category_id=1)
INTERSECT
(SELECT * FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
 WHERE category_id=2)


Hmm, als MySQL geen intersects kan dan kan je het ook wel met een subquery oplossen denk ik.
SQL:
1
2
3
4
SELECT * FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
WHERE category_id=1 AND album_id IN 
(SELECT album_id FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
 WHERE category_id=2)


Geen idee of mysql dat ook allemaal snapt, ik ken alleen SQL. Dat heb je met van die theoretische WO opleidingen informatica :P

[ Voor 163% gewijzigd door Orion84 op 22-01-2006 18:41 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Kan MySQL al intersects dan? Ik meen van niet (ook in 5.0 niet vziw).

In dit topic staan overigens wel een aantal voorbeelden van hoe het wel en niet kan:
[rml][ MySQL] Query blijft hangen[/rml]

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
Albums_Categories.Album_id, 
Album.Naam,
Sum(Albums_Categories.Category_id) AS SomV

FROM Album 
INNER JOIN Albums_Categories 
ON Album.Id = Albums_Categories.Album_id

WHERE (((Albums_Categories.Category_id)=1 Or (Albums_Categories.Category_id)=2))

GROUP BY Albums_Categories.Album_id, Album.Naam

HAVING (((Sum(Albums_Categories.Category_id))=3));

  • b19a
  • Registratie: September 2002
  • Niet online
Orion84 schreef op zondag 22 januari 2006 @ 18:30:
Hmm, als MySQL geen intersects kan dan kan je het ook wel met een subquery oplossen denk ik.
SQL:
1
2
3
4
SELECT * FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
WHERE category_id=1 AND album_id IN 
(SELECT album_id FROM `albums` LEFT JOIN `albums_categories` ON ( id = album_id ) 
 WHERE category_id=2)
MySQL snapt inderdaad (nog) geen intersects. Die tweede sql van je lijkt te werken, hartelijk dank! :)

[ Voor 32% gewijzigd door b19a op 22-01-2006 19:05 ]


  • Orion84
  • Registratie: April 2002
  • Laatst online: 22:30

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

BoukeHaarsma schreef op zondag 22 januari 2006 @ 19:05:
[...]

MySQL snapt inderdaad (nog) geen intersects. Die tweede sql van je lijkt te werken, hartelijk dank! :)
Graag gedaan. Toch handig zo'n enorm dik DataBase System Concepts boek :P

The problem with common sense is that it's not all that common. | LinkedIn | Flickr

Pagina: 1