sql >> Databáze >  >> RDS >> Oracle

chování vnitřního spojení uvnitř existuje sql

Rozdíl je v tom, že když použijete exists - dotaz uvnitř obvykle závisí na hlavním dotazu (tj. používá z něj sloupce a nelze jej tedy provést samostatně), a tak pro každý řádek hlavního dotazu zkontroluje, zda nějaká data získaná poddotazem existují či nikoli.

Problém vašeho prvního dotazu je, že poddotaz uvnitř existujícího bloku nijak nezávisí na hlavních sloupcích dotazu, je to samostatný dotaz, který vždy vrací řádek s 1 , takže pro jakýkoli řádek hlavního dotazu výsledek exists bude vždy true . Váš první dotaz je tedy ekvivalentní s

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

Viz také fiddle



  1. Odeberte VŠECHNY nebo konkrétní netisknutelný znak ze sloupce v mysql

  2. Získejte poslední odlišnou sadu záznamů

  3. provést cronjob přesně jednou

  4. Oracle prohledá seznam slov v řetězci a obnoví existující slova