Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.07.2012, 21:57
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Работа с left join
Есть 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)

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



Ввожу такой запрос, не работает.

Код:
select * from name1 left join name1 on name1.name=name2.name

Только начинаю изучать эти джоины, читаю здесь по примеру похожему, что-то не срабатывает: http://www.mysql.ru/docs/man/JOIN.html

Если можно покажите на моих банальных таблицах работу join. Заранее благодарю.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2012, 22:10
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kilogram
Код:
select * from name1 left join name1 on name1.name=name2.name
Вы случайно не ошиблись в запросе?
Код:
select * from name1 left join name2 on name1.name=name2.name
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2012, 22:58
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Попробовал алиасы использовать ,прочитал про них, с ними почему то не работает.

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

Код:
select * from name1 left outer join name2 on  name1.name=name2.name;
Результат выдает один и тот же
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2012, 23:43
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже?

Код:
select name1.name from name1 left join name2 on  name1.name=name2.name
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2012, 23:55
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kilogram
left join должен искать все строки в таблице name1 с величиной name, которая не присутствует в таблице name2, но в name2 присутствует Петя, почему оно все равно его выводит при этом запросе ниже?
Вы же написали name1.name=name2.name, значит наоборот, все строки в таблице name1 с величиной name, которая присутствует в таблице name2.
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2012, 23:59
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Там http://ru.wikipedia.org/wiki/Join_(SQL) написано такое:
Цитата:
LEFT OUTER JOIN

К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL.
А как знать где левая таблица, а где правая?
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2012, 00:10
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Левая таблица, это та, которая указывается слева слов LEFT JOIN, правая - соответственно справа.
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2012, 00:21
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kilogram
select name1.name from name1 left join name2 on name1.name=name2.name
Сообщение от oneguy
Вы же написали name1.name=name2.name, значит наоборот, все строки в таблице name1 с величиной name, которая присутствует в таблице name2.
Извините, я ошибся. Если все значения name2.name уникальны, то все значения name1.name выведутся по одному разу.
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2012, 00:24
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Перед джоином обязательно должна стоять таблица которая ссылается, а после джоина таблица на которую ссылаются?
Ответить с цитированием
  #10 (permalink)  
Старый 14.07.2012, 00:37
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kilogram
Перед джоином обязательно должна стоять таблица которая ссылается, а после джоина таблица на которую ссылаются?
Я не совсем понял, что означает, что одна таблица ссылается на другую, но отвечу так: операция LEFT JOIN является ассиметричной, поэтому переставлять таблицы нельзя. Операция INNER JOIN, напротив, является симметричной.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Оцените, пожалуйста код вёрстки OlegALL Ваши сайты и скрипты 18 26.07.2011 09:35
Каруселька в форме буквы Maximor17 Элементы интерфейса 0 24.05.2011 11:36
Постоянная работа скрипта Furio29 Общие вопросы Javascript 0 05.05.2011 17:40
Получится ли колонку посередине? micscr (X)HTML/CSS 13 17.02.2010 01:23