Форум: "Прочее";
Текущий архив: 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.046 c