sql >> Database teknologi >  >> RDS >> Oracle

adfærd af indre joinforbindelse inde eksisterer sql

Forskellen er, at når du bruger exists - forespørgslen inde afhænger normalt af hovedforespørgslen (gennemsnit bruger kolonner fra den og kan derfor ikke udføres separat), og derfor tjekker den for hver række i hovedforespørgslen, om nogle data, der hentes af underforespørgslen, findes eller ej.

Problemet med din første forespørgsel er, at underforespørgslen inde i en eksisterende blok ikke på nogen måde afhænger af hovedforespørgselskolonnerne, det er en separat forespørgsel, som altid returnerer en række med 1 , så resultatet af exists for enhver række i hovedforespørgslen vil altid være true . Så din første forespørgsel svarer bare til

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

Se også violin



  1. ORA-04084:kan ikke ændre NYE værdier for denne triggertype

  2. 30 tabeller med få rækker - TRUNCATE den hurtigste måde at tømme dem og nulstille vedhæftede sekvenser?

  3. Tilføjelse af timer, minutter, sekunder til SQL Date

  4. Fejl ved indsættelse i sql-database ved hjælp af php