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

Грешен изход в заявката FULL OUTER JOIN

Въз основа на това, което казахте в секцията за коментари, мисля, че трябва да промените един фрагмент от код...

  • Това, което искам е тази карта да няма поле14 като „Тестова карта“


(t1.field14 <> 'Тестова карта' и t1.field14 е null) 

=>

(t1.field14 <> 'Тестова карта' ИЛИ ​​t1.field14 е null) 


Изградете логическа таблица, за да проверите дали наистина искате AND или ако искате ИЛИ

<предварителен код>поле14 | (поле 14 <> „Тестова карта“) | (t1.field14 е null) | А ИЛИ Б | А И Б------------------------------------------- ----------------------------------„Тестова карта“ | НЕВЯРНО | НЕВЯРНО | НЕВЯРНО | FALSENULL | NULL | ВЯРНО | ВЯРНО | FALSE'Всяка карта' | ВЯРНО | НЕВЯРНО | ВЯРНО | НЕВЯРНО


РЕДАКТИРАНЕ Последвайте за коментар

Използване на OR в кода по-горе не може да даде TRUE когато Поле14 е „Тестова карта“ . И двата теста дават FALSE и така резултатът трябва да е FALSE .

Трябва да разделите нещата на етапи. Отстраняването на грешки трябва да се извършва чрез тестване на части наведнъж и постепенно доказване кое работи, за да се изолира кое не. Никога не се опитвайте да подредите всичко наведнъж, подхождайте към нещата методично.

Изпълнете този тест...

SELECT *, CASE WHEN field14 <> 'Test Card' THEN 1 ELSE 0 END Test1, CASE WHEN field14 IS NULL THEN 1 ELSE 0 END Test2, CASE WHEN field14 <> 'Test Card' OR field14 IS NULL THEN 1 ELSE 0 END 1_OR_2, CASE WHEN поле14 <> „Тестова карта“ И поле14 Е NULL THEN 1 ELSE 0 END 1_AND_2FROM tblCustomer 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо има допълнително (1 засегнат ред(а))

  2. Как да получите последния запис на група в SQL

  3. Пуснете външния ключ, без да знаете името на ограничението?

  4. Заявка за съвпадение на IP адрес в SQL Server

  5. Преобразувайте Time DataType във формат AM PM: