sql >> Database >  >> RDS >> Sqlserver

Zoekopdracht waarbij twee kolommen staan ​​in het resultaat van geneste zoekopdracht

Nee, er is geen slimmere manier om dit te schrijven (zonder Y twee keer te bezoeken), aangezien de X waarmee myTable.X en myTable.YY overeenkomen, mogelijk niet uit dezelfde rij komt.

Als alternatief is de EXISTS-vorm van de zoekopdracht

select *
from myTable A
where exists (select * from Y where A.X = Y.X)
  and exists (select * from Y where A.XX = Y.X)

Als Y X-waarden van 1,2,3,4,5 . bevat , en x.x = 2 en x.xx = 4 , ze bestaan ​​allebei (op verschillende records in Y) en het record van myTable moet worden weergegeven in de uitvoer.

EDIT:dit antwoord eerder verklaarde dat You could rewrite this using _EXISTS_ clauses which will work faster than _IN_ . Zoals Martin heeft opgemerkt, is dit niet waar (zeker niet voor SQL Server 2005 en hoger). Zie links



  1. Vind de gegevensbron voor een bepaalde tabel - ORACLE

  2. Oracle-documentatie

  3. sql use-instructie met variabele

  4. Gids voor het ontwerpen van een database voor RBAC in MySQL