[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: left join
kilogram
Есть 2 таблицы: name1 и name2;
name1 создана так:

create table name1(id int(3) auto_increment, name varchar(10), primary key(id))



name2 создана так:

create table name2(id int(3) auto_increment, name varchar(10), primary key(id),foreign key(name) references name1)



Вот так заполнены таблицы:

user posted image

Скажите, чем отличается это:
select * from name1 left join name2 on  name1.name=name2.name;


от этого?

select * from name1 left outer join name2 on  name1.name=name2.name;


Результат выдает один и тот же



Спустя 48 минут, 36 секунд (13.07.2012 - 22:44) kilogram написал(а):
left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже?

select name1.name from name1 left join name2 on  name1.name=name2.name 

Спустя 10 минут, 23 секунды (13.07.2012 - 22:55) Placido написал(а):
Цитата (kilogram @ 13.07.2012 - 21:56)

Скажите, чем отличается это:
select * from name1 left join name2 on  name1.name=name2.name;


от этого?

select * from name1 left outer join name2 on  name1.name=name2.name;


Результат выдает один и тот же

В MySQL это одно и то же.

Цитата (kilogram @ 13.07.2012 - 22:44)
left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже?

select name1.name from name1 left join name2 on  name1.name=name2.name 

Спустя 1 минута, 22 секунды (13.07.2012 - 22:56) kilogram написал(а):
Там http://ru.wikipedia.org/wiki/Join_(SQL) написано такое:
Цитата
LEFT OUTER JOIN

К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL.


А как знать где левая таблица, а где правая?

Спустя 2 минуты, 39 секунд (13.07.2012 - 22:59) Placido написал(а):
Та, что слева от слова LEFT - левая. В примере выше, соответственно, таблица name1.

Спустя 4 минуты, 41 секунда (13.07.2012 - 23:03) kilogram написал(а):
select name1.name from name1 left join name2 on  name2.name=name1.name 


name2.name - это всегда считается левая таблица,
name1.name - это всегда считается правая таблица?

Спустя 6 минут, 24 секунды (13.07.2012 - 23:10) Placido написал(а):
name1(слева от join, значит, левая) left join name2(справа от join, значит, правая)

Спустя 13 минут, 1 секунда (13.07.2012 - 23:23) kilogram написал(а):
Перед джоином обязательно должна стоять таблица которая ссылается, а после джоина таблица на которую ссылаются?

Спустя 5 минут, 31 секунда (13.07.2012 - 23:28) Placido написал(а):
К таблице, имя которой стоит перед джойном, присоединяется таблица, имя которой идет после джойна.

Спустя 32 минуты, 8 секунд (14.07.2012 - 00:00) kilogram написал(а):
Вот написал запрос:
select *from name1 right join name2 on  name1.name=name2.name where name1.name is not NULL


К таблице, имя которой стоит перед джойном - name1,
присоединяется таблица, имя которой идет после джойна - name2
Далее стоит условие, согласно которому выводить. Условие такое:

Выводить, все строки из таблицы name1 с полем name, которые не присутствуют в таблице name2.

У меня такие записи в таблице name2, добавил 2 записи:
user posted image

Почему в результате выводит?
1  Петя   1 Петя


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.