Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie, w którym w wyniku zagnieżdżonego zapytania znajdują się dwie kolumny

Właściwie nie, nie ma mądrzejszego sposobu na napisanie tego (bez dwukrotnego odwiedzania Y), biorąc pod uwagę, że X, do którego pasuje myTable.X i myTable.YY, może nie pochodzić z tego samego wiersza.

Alternatywnie, forma zapytania EXISTS to

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

Jeśli Y zawiera X wartości 1,2,3,4,5 i x.x = 2 i x.xx = 4 , oba istnieją (w różnych rekordach w Y), a rekord z myTable powinien być pokazany w danych wyjściowych.

EDYTUJ:Ta odpowiedź wcześniej stwierdził, że You could rewrite this using _EXISTS_ clauses which will work faster than _IN_ . Jak zauważył Martin, nie jest to prawdą (z pewnością nie w przypadku SQL Server 2005 i nowszych wersji). Zobacz linki



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozważania dotyczące bezpieczeństwa SQL Server

  2. Porównaj ciągi rozdzielane przecinkami w SQL

  3. SQL — Odejmowanie wyczerpującej się wartości od wierszy

  4. C#/SQL:tworzenie kopii zapasowych i przywracanie przez kopiowanie i zastępowanie plików bazy danych?

  5. Jak mogę pogrupować według kolumny daty i godziny bez uwzględniania czasu?