Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявка, където две колони са в резултат на вложена заявка

Всъщност не, няма по-умен начин да напишете това (без да посещавате Y два пъти), като се има предвид, че X, на който отговарят myTable.X и myTable.YY, може да не е от един и същи ред.

Като алтернатива, формата EXISTS на заявката е

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

Ако Y съдържа X стойности на 1,2,3,4,5 и x.x = 2 и x.xx = 4 , и двата съществуват (в различни записи в Y) и записът от myTable трябва да бъде показан в изхода.

РЕДАКТИРАНЕ:Този отговор преди заяви, че You could rewrite this using _EXISTS_ clauses which will work faster than _IN_ . КАКТО посочи Мартин, това не е вярно (със сигурност не за SQL Server 2005 и по-нова версия). Вижте връзки



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да филтрирате редове с нулеви стойности в изявление за избор в SQL Server - SQL Server / TSQL урок, част 110

  2. Операторът Datetime BETWEEN не работи в SQL Server

  3. Трябва да изчисля стойности за запис в база данни въз основа на други стойности в други записи

  4. Вредни, широко разпространени митове за производителността на SQL Server

  5. Как да получа неуспешни задания от агент на sql сървър чрез скрипт?