de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 BCS
BCS
Question

SQL sujungimas: kur sąlyga vs. on sąlyga

Perskaičius, tai nėra Explicit vs Implicit SQL Joins dublikatas. Atsakymas gali būti susijęs (ar net toks pats), bet klausimas skiriasi.


Koks skirtumas ir kas turėtų būti kiekvienoje iš jų?

Jei teisingai suprantu teoriją, užklausų optimizatorius turėtų galėti naudoti abu šiuos elementus pakaitomis.

612 2008-12-09T20:14:52+00:00 3
 Community
Community
Redaguotas klausimas priešpietr gegužė 2017 в 10:31
Programavimas
sql
join
where-clause
on-clause
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
Joel Coehoorn
Joel Coehoorn
popietr gruodis 2008 в 8:21
2008-12-09T20:21:10+00:00
Daugiau
Šaltinis
Redaguoti
#8681761

Tai nėra tas pats.

Panagrinėkite šias užklausas:

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID
WHERE Orders.ID = 12345

ir

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID 
    AND Orders.ID = 12345

Pirmasis grąžins užsakymą ir jo eilutes, jei tokių yra, užsakymo numeriui 12345. Antrasis grąžins visus užsakymus, bet tik užsakymas 12345 turės su juo susijusių eilučių.

Naudojant INNER JOIN, šie straipsniai yra efektyviai lygiaverčiai. Tačiau vien tai, kad jie funkciškai yra vienodi, t. y. duoda tuos pačius rezultatus, nereiškia, kad šių dviejų rūšių sąlygos turi tą pačią semantinę reikšmę.

Joel Coehoorn
Joel Coehoorn
Redaguotas atsakymas popietr rugpjūtis 2016 в 7:06
798
0
Cade Roux
Cade Roux
popietr gruodis 2008 в 8:21
2008-12-09T20:21:28+00:00
Daugiau
Šaltinis
Redaguoti
#8681762

Naudojant INNER JOIN jie yra pakeičiami, o optimizatorius juos pertvarkys pagal pageidavimą.

Priklausomai nuo to, nuo kurios sujungimo pusės jie priklauso, jungiant OUTER JOIN, jie nebūtinai yra sukeičiami vietomis.

Aš juos įrašau bet kurioje vietoje, priklausomai nuo skaitomumo.

141
0
matt b
matt b
popietr gruodis 2008 в 8:20
2008-12-09T20:20:19+00:00
Daugiau
Šaltinis
Redaguoti
#8681760

Vidiniame sujungime jie reiškia tą patį. Tačiau išorinio sujungimo rezultatai skirsis priklausomai nuo to, ar sujungimo sąlygą įrašysite į WHERE, ar į ON sąlygą. Pažvelkite į šį susijusį klausimą ir šį atsakymą (mano).

Manau, kad prasmingiausia jungimo sąlygą visuomet pateikti ON sąlygoje (nebent tai išorinis sujungimas ir iš tikrųjų norite, kad ji būtų pateikta Where sąlygoje), nes visiems, skaitantiems jūsų užklausą, bus aiškiau, kokiomis sąlygomis lentelės yra sujungiamos, be to, tai padės išvengti, kad WHERE sąlyga būtų dešimčių eilučių ilgio.

 Community
Community
Redaguotas atsakymas popietr gegužė 2017 в 12:26
30
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 4 dienas
2
Hideo Nakagawa
Registruota prieš 5 dienas
3
Sergiy Tytarenko
Registruota prieš 6 dienas
4
shoxrux azadov
Registruota prieš 1 savaitę
5
Koreets Koreytsev
Registruota prieš 1 savaitę
BG
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PT
RU
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę