Подскажите с LEFT JOIN

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
Таблица 1 (name)

Код PHP:
  1. +----+-----------+
  2. | id | name |
  3. +----+-----------+
  4. | 1 | Книга |
  5. | 2 | Табуретка |
  6. | 3 | Карандаш |
  7. +----+-----------+
Таблица 2 (who)

Код PHP:
  1. +------+-----------+
  2. | sid | name |
  3. +-------+-----------+
  4. | 646 | Книга |
  5. | 325 | Табуретка |
  6. | 666 | Карандаш |
  7. +-------+-----------+
Как выбрать все id из таблицы 1 так чтобы name Из таблицы 1 не встречался в таблице 2 с sid = "325"
Помогите плиз составить запрос ...
Редактировалось: 2 раз (Последний: 16 июля 2013 в 13:27)
Дополнения для InstantCMS
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Попробуйте:
Код SQL:
  1. SELECT n.id FROM name n LEFT JOIN who w ON w.name = n.name WHERE w.sid != 325
По идее он всё равно выведет с id 1, ибо name Книга есть и с другим sid
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
+ в карму за помощь, пошел изучать матчасть)
Дополнения для InstantCMS
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Join, вам стыдно не знать про JOIN smile
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
Вот так что-то у меня с лефтом.

Чуток не правильно вопрос задал.
Вот как надо:

Как выбрать все name из таблицы 1 так чтобы name Из таблицы 1 не встречался в таблице 2 с sid = "325" ?
Редактировалось: 1 раз (Последний: 16 июля 2013 в 00:13)
Дополнения для InstantCMS
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Код SQL:
  1. SELECT n.name FROM name n LEFT JOIN who w ON w.name = n.name
  2. WHERE w.name NOT IN (SELECT name FROM who WHERE sid = 325)
Выведет Табуретка и Карандаш.
Редактировалось: 1 раз (Последний: 16 июля 2013 в 09:37)
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
Сообщений: 18
Join, если столбец name присутствует и в первой таблице и во второй, то просто используете при запросе "DISTINCT name". и все. )
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
stipp, там name Книга есть и с другим sid, если чё)
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
Код PHP:
  1. $query = "SELECT n.name FROM name n LEFT JOIN who w ON w.name = n.name
  2. WHERE w.name NOT IN (SELECT name FROM who WHERE sid = 325)";
  3. $result = mysql_query($query);
  4. $ref = mysql_num_rows($result);
Должен вроде вывести кол-во найденых строк .... не выводит ...
Код PHP:
  1. $query = "SELECT * FROM name WHERE id = 1)";
  2. $result = mysql_query($query);
  3. $ref = mysql_num_rows($result);
Такой простой запрос выводит.

Вспомнил ... нужно же еще добавить в выборку условие, чтоб выбирал из первой таблицы с условием WHERE id=1
Дополнения для InstantCMS
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Join, до:
Join:
Редактировалось: 2 раз (Последний: Сегодня в 13:27)
у вас было написано, что в who две Книга, однако и при нынешнем раскладе запрос работает (во вложении).
Прикрепленные файлы:
aname_3j6bv.jpg | 27.84 Кб | Скачали: 481
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Join:
Вспомнил ... нужно же еще добавить в выборку условие, чтоб выбирал из первой таблицы с условием WHERE id=1
Ну и раз во второй таблице значения не повторяются, то можно просто:
Код SQL:
  1. SELECT n.name FROM name n LEFT JOIN who w ON w.name = n.name WHERE w.sid != 325 AND n.id = 1
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
lokanaft:
Ну и раз во второй таблице значения не повторяются
этот вариант работает, но если во второй таблице значение name повторяется, то результат неверный ...
Дополнения для InstantCMS
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Join, если повторяется, то запрос из поста 6 и он работает, как вы можете видеть по скрину. Но если вы добавите условие:
Join:
WHERE id=1
То он ничего не выведет, потому что с ид 1 Книга, а она вчера дублировалась во второй таблице с sid 325, а раз этот sid запрещён, то он ничего и не выведет. Дальше сами разбирайтесь. Только не забудьте сначала всё вспомнить, чтобы потом не пришлось переделывать.
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
Код PHP:
  1. SELECT name FROM name WHERE id = 1 AND name NOT IN (SELECT name FROM who WHERE sid = 325)
вот так упростил и все работает как надо
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
и left join в заголовке темы оказался не причем. просто прием not in "забыл"
Дополнения для InstantCMS
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.