Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Вопрос по MySQL: LEFT JOIN и RIGHT JOIN   Найти похожие ветки 

 
vidiv ©   (2006-01-30 07:20) [0]

Эти два запроса одинаковые по смыслу:

SELECT `t1`.* FROM `t1` LEFT JOIN `t2` ON `t1`.`id`=`t2`.`id`

SELECT `t1`.* FROM `t2` RIGHT JOIN `t1` ON `t1`.`id`=`t2`.`id`


 
vidiv ©   (2006-01-30 07:21) [1]

Это был вопрос :)


 
ЮЮ ©   (2006-01-30 07:25) [2]

Нет.
Если в t2 есть записи, кототым нет соответствующих в t1, то первый запрос их не вернет, т.к. "пляшет" от t1, а второй вернет записи с NULL-евыми полями


 
Lamer@fools.ua ©   (2006-01-30 09:16) [3]

>Эти два запроса одинаковые по смыслу

Да.


 
Lamer@fools.ua ©   (2006-01-30 09:17) [4]

P.S. к [3].
Теоретически. Не знаю, как там в MySQL :-)


 
ЮЮ ©   (2006-01-30 09:53) [5]


> Lamer@fools.ua ©   (30.01.06 09:17) [4]

Как раз теоретически и нет. Или в [2] что-то неверно сказано?


 
Nikolay M. ©   (2006-01-30 10:12) [6]


> ЮЮ ©   (30.01.06 07:25) [2]

Дык в первом случае у него лефт к Т1, а во втором - райт к Т2. Разницы никакой.


 
Johnmen ©   (2006-01-30 10:23) [7]

Разницы никакой.


 
ЮЮ ©   (2006-01-30 10:39) [8]

t1 : id
1
3

t2:  Id
1
2

Первый запрос вернет  
1
3
Второй
1
NULL

Разницы, с точки зрения всех, кроме меня, никакой. Но  ведь 3 <> NULL.

З.ы.. Но ве дь невеоно и обратное: 3 = NULL. Значит не прав и я. Вот ведь проблема :)


 
vidiv ©   (2006-01-30 10:47) [9]


> ЮЮ ©   (30.01.06 10:39) [8]
> t1 : id
> 1
> 3
>
> t2:  Id
> 1
> 2
>
> Первый запрос вернет  
> 1
> 3
> Второй
> 1
> NULL

В твоем примере оба запроса возвращают 1, 3. (MySQL). Я только что проверил.


 
Nikolay M. ©   (2006-01-30 10:47) [10]


> ЮЮ ©   (30.01.06 10:39) [8]

А на чем проверял? У меня мускуля, к сожалению, сейчас нет под рукой. А для MS SQL разницы нет:

CREATE TABLE #t1 (id INT)

CREATE TABLE #t2 (id INT)

INSERT INTO #t1
SELECT 1
UNION
SELECT 2

INSERT INTO #t2
SELECT 1
UNION
SELECT 3

SELECT #t1.* FROM #t1 LEFT JOIN #t2 ON #t1.id=#t2.id

SELECT #t1.* FROM #t2 RIGHT JOIN #t1 ON #t1.id=#t2.id


 
vidiv ©   (2006-01-30 10:52) [11]

Порядок запросов из таблиц один и тотже:

SQL-запрос: EXPLAIN SELECT `t1`. * FROM `t1` LEFT JOIN `t2` ON `t1`.`id` = `t2`.`id` ;

id  select_type  table  type rows
1   SIMPLE       t1     ALL  2  
1   SIMPLE       t2     ALL  2


SQL-запрос: EXPLAIN SELECT `t1`. * FROM `t2` RIGHT JOIN `t1` ON `t1`.`id` = `t2`.`id` ;

id  select_type  table  type rows
1   SIMPLE       t1     ALL  2  
1   SIMPLE       t2     ALL  2


Помоему действительно оба запроса одинаковые по функционалу


 
jack128 ©   (2006-01-30 10:52) [12]

Nikolay M. ©   (30.01.06 10:47) [10]
Я на FB проверил - прав ЮЮ.  Да и сточки зрения логики - он прав.


 
jack128 ©   (2006-01-30 10:55) [13]

Хе, я запросик не так написал, нет правы Коля М и Co  :-)


 
McSimm ©   (2006-01-30 10:55) [14]

по теме, конечно запросы равноценны.

офтопик:

> 3 <> NULL.
>
> Но ведь неверно и обратное: 3 = NULL.

тут что-то с логикой не в порядке, или это мой недосып?


 
Nikolay M. ©   (2006-01-30 10:56) [15]


> jack128 ©   (30.01.06 10:52) [12]
> Я на FB проверил - прав ЮЮ.

А я на мс скл проверил: правы я, Джонмен и Lamer@fools.ua, и с т.з. логики мы тоже правы, что дальше? :)
Запрос покажи - ?


 
jack128 ©   (2006-01-30 10:57) [16]

ЮЮ ©   (30.01.06 10:39) [8]

Ты наверника сделал туже ошибку, что и я - у тя второй запрос вот так выглядит:
SELECT `t2`.* FROM `t2` RIGHT JOIN `t1` ON `t1`.`id`=`t2`.`id`


 
ЮЮ ©   (2006-01-30 10:57) [17]


> jack128 ©   (30.01.06 10:52) [12]

Да и сточки зрения логики - он прав.

С логикой сегдгя у меня уже напряг (магические числа 3.62 и 4.12 сделали своё дело), но поже я ошибся, выдавая t1 Right JOIN t2 за  t2 Right JOIN t1. По крайней мере MS SQL так говорит, а я ему привык доверять


 
Nikolay M. ©   (2006-01-30 10:57) [18]


> jack128 ©   (30.01.06 10:55) [13]
> Хе, я запросик не так написал, нет правы Коля М и Co  :-)

Ни разу в себе и Со не сомневался :)


 
Nikolay M. ©   (2006-01-30 10:59) [19]


> поже я ошибся, выдавая t1 Right JOIN t2 за  t2 Right JOIN
> t1

Я тебе еще в [6] об этом сказал, даже заболдить не поленился :?)


 
Vlad433 ©   (2006-01-30 11:02) [20]

На интербасе 6.0 оба запроса возвращают 1,3.


 
ЮЮ ©   (2006-01-30 11:03) [21]


>
> Ни разу в себе и Со не сомневался :)


offtop, конечно, но откуда тогда
http://delphimaster.net/view/15-1138301130/
возник, если экспорт в csv встроен в программу. Отстется лишь экспорт в MS SQL, в котором ты как рыба в воде, даже не сомневаешься


 
Nikolay M. ©   (2006-01-30 11:06) [22]


> ЮЮ ©   (30.01.06 11:03) [21]

Не нашел связи между сабжем, моей веткой, мс скулем и экспортами.


 
Johnmen ©   (2006-01-30 11:20) [23]

Разницы никакой. Независимо от типа БД.
Точка.
:)



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.037 c
15-1138358472
Rust007
2006-01-27 13:41
2006.02.19
Учебник


4-1133540107
XCoder
2005-12-02 19:15
2006.02.19
Как заставить окно всегда быть поднизом?


15-1137870228
ArtemESC
2006-01-21 22:03
2006.02.19
А что вы думаете о Greenpiece?


2-1138961992
Hut
2006-02-03 13:19
2006.02.19
Как вернуть в консоль результат работы программы?


2-1138628089
Neo Trinitron
2006-01-30 16:34
2006.02.19
Иконки зарегистрированных типов