sql >> Databasteknik >  >> RDS >> Oracle

beteende av inre join inuti existerar sql

Skillnaden är att när du använder exists - frågan inuti beror vanligtvis på huvudfrågan (genomsnittet använder kolumner från den och kan därför inte köras separat) och därför kontrollerar den för varje rad i huvudfrågan om någon data som hämtas av underfrågan finns eller inte.

Problemet med din första fråga är att underfrågan inuti existerande block inte i vilket fall som helst beror på huvudfrågekolumnerna, det är en separat fråga som alltid returnerar en rad med 1 , så resultatet av exists för vilken rad som helst i huvudfrågan kommer alltid att vara true . Så din första fråga motsvarar bara

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

Se även fiol



  1. utföra ett cronjob exakt en gång

  2. Android anpassad kalender och påminnelse

  3. Standardvärde för kolumn postgres funktion med argument

  4. Laravel 5 UnexpectedValueException som svar på fråga på grund av användning av POINT-data