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

Условно JOIN изявление SQL Server

Мисля, че това, което искате, ще работи, като се присъедините към Първоначалния таблица към двете Option_A и Опция_B с помощта на LEFT JOIN , което ще произведе нещо подобно:

Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B

Примерен код:

SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234

След като направите това, вие "игнорирате" набора от NULLS. Допълнителният трик тук е в реда SELECT, където трябва да решите какво да правите с NULL полетата. Ако таблиците Option_A и Option_B са подобни, тогава можете да използвате COALESCE функция за връщане на първата стойност NON NULL (както в примера).

Другата опция е, че просто ще трябва да изброите полетата Option_A и полетата Option_B и да оставите всичко, което използва ResultSet за да се справят с определянето кои полета да се използват.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се посочи условие в Count()?

  2. Как да генерирате план за изпълнение в SQL Server

  3. Връща всички възможни комбинации от стойности на колони в SQL

  4. Разбиране на облачно базирано наблюдение на производителността на SQL сървър

  5. Използване на DBCC CLONEDATABASE за генериране на схема и статистически копие само на потребителска база данни в SQL Server 2014 SP2