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

поведение на вътрешно присъединяване вътре съществува sql

Разликата е, че когато използвате exists - заявката вътре обикновено зависи от основната заявка (означава, че използва колони от нея и затова не може да бъде изпълнена отделно) и така за всеки ред от основната заявка проверява дали някои данни, извлечени от подзаявката, съществуват или не.

Проблемът с първата ви заявка е, че подзаявката вътре в съществуващия блок по никакъв начин не зависи от основните колони на заявката, това е отделна заявка, която винаги връща ред с 1 , така че за всеки ред от основната заявка резултатът от exists винаги ще бъде true . Така че първата ви заявка е просто еквивалентна на

SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123 
AND user.company_id IS NOT NULL

Вижте също цигулка



  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

  2. Има ли начин да се даде удобно за потребителя съобщение за грешка при нарушение на ограничението

  3. как да замените няколко низа заедно в Oracle

  4. Прозоречната функция Last_value не работи правилно

  5. Как да получите генерирания идентификатор от вмъкнат ред с помощта на ExecuteScalar?