Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.043 c
6-1131526303
Ezorcist
2005-11-09 11:51
2006.02.19
Обработчики событий у компонента TServerSocket


10-1113541861
12345
2005-04-15 09:11
2006.02.19
Связь м/у CoInitializeEx и OpenDialog?


2-1138980752
Змей
2006-02-03 18:32
2006.02.19
движение Image


2-1138559158
JEK2
2006-01-29 21:25
2006.02.19
Зеркальное отображение картинки


2-1138786269
Kolan
2006-02-01 12:31
2006.02.19
Приведение типов массивов...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский