[SQL] select ID waar de waarde uit twee kolommen het zelfde

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • stavast
  • Registratie: Mei 2004
  • Laatst online: 27-10-2022
ik zoek een query waarmee ik de ID's kan ophalen van rows die in twee specifieke kolommen dezelfde waarde hebben. momenteel zit ik al zo lang te zoeken dat ik het even niet meer zie.

voorbeeld:

IDvalue1value2
1aapboom
2kipvarken
3aapboom
4kipkonijn


ik zou dus als antwoord 1 en 3 moeten krijgen.

kan iemand mij uitleggen hoe ik dit voor elkaar krijg. volgens mij is het niet hetzelfde als zoeken naar duplicaten, want in de volgende kolommen kunnen misschien andere dingen voor komen. het is dus specifiek zoeken naar het ID waarvan twee specifieke klommen dezelfde waarden hebben

Acties:
  • 0 Henk 'm!

  • Strikertje
  • Registratie: Augustus 2005
  • Laatst online: 13:13
Probeer dit eens:..

SELECT ID
WHERE value1 = value1
AND value2 = value 2

Acties:
  • 0 Henk 'm!

  • stavast
  • Registratie: Mei 2004
  • Laatst online: 27-10-2022
Strikertje schreef op woensdag 13 april 2011 @ 15:25:
Probeer dit eens:..

SELECT ID
WHERE value1 = value1
AND value2 = value 2
je zet me in ieder geval al aardig in de richting. nu krijg ik alle ID's, maar ook waarvan value1 en value2 weer verschillen van de andere ID's. is dit überhaupt wel mogelijk zonder parameters mee te geven?

Acties:
  • 0 Henk 'm!

  • Strikertje
  • Registratie: Augustus 2005
  • Laatst online: 13:13
Jah ik weet even de vergelijkingsoperator niet dat hij de waardes in de rijen vergelijkt die dan t zelfde moeten zijn... Ik ga even zoeken voor je!

Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

Strikertje schreef op woensdag 13 april 2011 @ 15:25:
Probeer dit eens:..

SELECT ID
WHERE value1 = value1
AND value2 = value 2
Dat geeft gewoon alle rijen terug, gaat je niet helpen.
stavast schreef op woensdag 13 april 2011 @ 15:29:
[...]


je zet me in ieder geval al aardig in de richting. nu krijg ik alle ID's, maar ook waarvan value1 en value2 weer verschillen van de andere ID's. is dit überhaupt wel mogelijk zonder parameters mee te geven?
Je wilt eigenlijk row-id's waarvan value1 meerder malen voorkomt.
Dus je moet eerst bepalen welke waarden van value1 meerder malen voorkomen, en daar de id's bij zoeken


[code=sql]
SELECT ID
FROM TABLE
WHERE value1 IN (SELECT value1 FROM TABLE GROUP BY value1 HAVING COUNT(value1) > 1)
[/code]


of met een join zoals hieronder idd

SQL:
1
2
DISTINCT SELECT table1.ID
FROM TABLE as table1 INNER JOIN TABLE as table2 ON (table1.value1 = table2.value1 AND table1.value2 = table2.value2 AND table1.ID <> table2.ID)


zoiets zou ook kunnen werken.

/edit
2 kolommen moeten hetzelfde zijn? dan beter met de join

[ Voor 15% gewijzigd door J2pc op 13-04-2011 15:38 . Reden: 2 kolommen ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 12:10
Strikertje schreef op woensdag 13 april 2011 @ 15:25:
Probeer dit eens:..

SELECT ID
WHERE value1 = value1
AND value2 = value 2
Je krijgt nu alle id's, omdat:
"value1 = value1" altijd waar is
EN
"value2 = value2" altijd waar is

Dit klopt dus niet.. Je wilt in dit geval alleen de id's hebben die allemaal hetzelfde zijn.
Volgens mij moet je gaan kijken naar een join op dezelfde tabel, en groeperingen.


Met hierboven:

Als hierboven kan je werken, als je in de subquery een groepering doet op de kolommen die "samen uniek" moeten zijn, heb je in elk geval al de unieke waarden, het is dan een kwestie van deze laten doorlopen in je hoofdquery.

[ Voor 20% gewijzigd door jbdeiman op 13-04-2011 15:36 ]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

SQL:
1
2
3
4
5
6
7
8
9
SELECT 
    T1.ID 
FROM 
    TestTable T1, 
    TestTable T2 
WHERE 
    T1.value1 = T2.value1 
    AND T1.value2 = T2.value2 
    AND T1.ID <> T2.ID

De values moeten aan elkaar gelijk zijn, en de ID's juist niet :)

[edit]
:w j2pc
Je hebt helemaal gelijk. neus, kijken, lang :P

[ Voor 12% gewijzigd door TheRookie op 13-04-2011 15:51 ]


Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

TheRookie schreef op woensdag 13 april 2011 @ 15:38:
SQL:
1
2
3
4
5
6
7
8
9
SELECT 
    T1.ID 
FROM 
    TestTable T1, 
    TestTable T2 
WHERE 
    T1.value1 = T2.value1 
    AND T1.value2 = T2.value2 
    AND T1.ID <> T2.ID

De values moeten aan elkaar gelijk zijn, en de ID's juist niet :)

[edit]
:w j2pc
offtopic:
:w psst, je bent je distinct vergeten, als een set meer dan 2x voorkomt krijg je dubbele id's.
bv met 3x (a,b,c)
a b
a c
b a
b c
c a
c b
:>

[ Voor 5% gewijzigd door J2pc op 13-04-2011 15:49 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

  • stavast
  • Registratie: Mei 2004
  • Laatst online: 27-10-2022
WhoeHoe! het is gelukt door de combo van jullie beide! heel erg bedankt, kan ik toch nog met een glimlach de deur uit!

dit is het geworden:

SQL:
1
2
3
4
5
6
7
8
SELECT DISTINCT 
    table1.ID AS ID, table1.value1, table1.value2
FROM 
    table1
INNER JOIN 
    table2 AS table2_temp
ON 
    (table1.value1 = table2_temp.value1 AND table1.value2 = table2_temp.value2 and table1.ID <> table2_temp.ID)

[ Voor 54% gewijzigd door stavast op 13-04-2011 16:02 ]


Acties:
  • 0 Henk 'm!

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

stavast schreef op woensdag 13 april 2011 @ 15:56:
WhoeHoe! het is gelukt door de combo van jullie beide! heel erg bedankt, kan ik toch nog met een glimlach de deur uit!
Graag gedaan!
En handig voor het archief: wat is het uiteindelijk geworden?

Mocht er dan iemand via de search hier belanden, dan hebben ze 'm ook gelijk ;)

/edit
stavast schreef op woensdag 13 april 2011 @ 16:01:
[...]


was er net mee bezig. ik ben daar altijd een groot voorstander van. loop me soms kapot te zoeken op internet en dan denk je het gevonden te hebben, maar dan is het antwoord er niet!
Dan heb ik niks gezegd }:O
Vreselijk irritant idd als er alleen staat dat het uiteindelijk gelukt is, maar het uiteindelijke antwoord er niet staat. :'(

[ Voor 39% gewijzigd door J2pc op 13-04-2011 16:10 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Acties:
  • 0 Henk 'm!

  • stavast
  • Registratie: Mei 2004
  • Laatst online: 27-10-2022
J2pc schreef op woensdag 13 april 2011 @ 15:58:
[...]

Graag gedaan!
En handig voor het archief: wat is het uiteindelijk geworden?

Mocht er dan iemand via de search hier belanden, dan hebben ze 'm ook gelijk ;)
was er net mee bezig. ik ben daar altijd een groot voorstander van. loop me soms kapot te zoeken op internet en dan denk je het gevonden te hebben, maar dan is het antwoord er niet!

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:55

voodooless

Sound is no voodoo!

Even ter aanvulling voor het geval dat je dit zou willen gebruiken voor te ontdubbelen kun je zoiets gebruiken:

SQL:
1
2
3
4
5
6
select (select max(id) from test where value1=value1 and value2=value2 limit 1) as id, 
          value1,
          value2 
from test 
group by value1,value2 
having count(id)>1


Ik weet niet of dit ook in M(S/y)SQL werkt, in PostgreSQL in ieder geval wel ;)

[ Voor 3% gewijzigd door voodooless op 13-04-2011 17:39 ]

Do diamonds shine on the dark side of the moon :?

Pagina: 1