{% else-1 %}
Обновить
* Тема закрыта!
1. [автор] (3 июл 2015, 20:51) [0/1] [-1] [спам] [под]

В таблице users есть 2 столбца, a1 и b1.
Вопрос: каким запросом в бд можно их объединить чтобы инфа с обоих была в столбце b2 ??

2. (3 июл 2015, 20:53) [0/0] [0] [спам] [под]

a1 +b1 что тут сложного

3. [автор] (3 июл 2015, 20:56) [0/0] [0] [спам] [под]
Саке,

Вопрос читай внимательно, математик.

4. (3 июл 2015, 20:59) [0/0] [0] [спам] [под]

Когда мы с Вами делали выборку из одной таблицы, то всё было очень просто:

SELECT названия_нужных_полей FROM название_таблицы WHERE условие_выборки
Всё очень просто и тривиально, но при выборке сразу из нескольких таблиц становится всё несколько сложнее. Одна из трудностей - это совпадение имён полей. Например, в каждой таблице есть поле id.

Давайте рассмотрим такой запрос:

SELECT * FROM table_1, table_2 WHERE table_1.id > table_2.user_id
Многим, кто не занимался подобными запросами, покажется, что всё очень просто, подумав, что здесь добавились только названия таблиц перед названиями полей. Фактически, это позволяет избежать противоречий между одинаковыми именами полей. Однако, сложность не в этом, а в алгоритме работы подобного SQL-запроса.

Перед тем как читать дальше, попробуйте самостоятельно сообразить, как будет работать подобный SQL-запрос. Что он должен вывести?

Алгоритм работы следующий: берётся первая запись из table_1. Берётся id этой записи из table_1. Дальше полностью смотрится таблица table_2. И добавляются все записи, где значение поля user_id меньше id выбранной записи в table_1. Таким образом, после первой итерации может появиться от 0 до бесконечного количества результирующих записей. На следующей итерации берётся следующая запись таблицы table_1. Снова просматривается вся таблица table_2, и вновь срабатывает условие выборки table_1.id > table_2.user_id. Все записи, удовлетворившие этому условию, добавляются в результат. На выходе может получиться огромное количество записей, во много раз превышающих суммарный размер обеих таблиц.

Если Вы поняли, как это работает после первого раза, то очень здорово, а если нет, то читайте до тех пор, пока не вникните окончательно. Если Вы это поймёте, то дальше будет проще.

Предыдущий SQL-запрос, как таковой, редко используется. Он был просто дан для объяснения алгоритма выборки из нескольких таблиц. А теперь же разберём более приземистый SQL-запрос. Допустим, у нас есть две таблицы: с товарами (есть поле owner_id, отвечающего за id владельца товара) и с пользователями (есть поле id). Мы хотим одним SQL-запросом получить все записи, причём чтобы в каждой была информация о пользователе и его одном товаре. В следующей записи была информация о том же пользователе и следущем его товаре. Когда товары этого пользователя кончатся, то переходить к следующему пользователю. Таким образом, мы должны соединить две таблицы и получить результат, в котором каждая запись содержит информацию о пользователе и об одном его товаре.

Подобный запрос заменит 2 SQL-запроса: на выборку отдельно из таблицы с товарами и из таблицы с пользователями. Вдобавок, такой запрос сразу поставит в соответствие пользователя и его товар.

Сам же запрос очень простой (если Вы поняли предыдущий):

SELECT * FROM users, products WHERE users.id = products.owner_id
Алгоритм здесь уже несложный: берётся первая запись из таблицы users. Далее берётся её id и анализируются все записи из таблицы products, добавляя в результат те, у которых owner_id равен id из таблицы users. Таким образом, на первой итерации собираются все товары у первого пользователя. На второй итерации собираются все товары у второго пользователя и так далее.

Как видите, SQL-запросы на выборку из нескольких таблиц не самые простые, но польза от них бывает колоссальная, поэтому знать и уметь использовать подобные запросы очень желательно.

5.
Presto * 1.93
(3 июл 2015, 20:59) [0/0] [0] [спам] [под]

insert from `users` set `c1` = (`a1`+`b1`)
как-то так *


Изм. 1 раз. / Посл. изм.
Presto * 1.93
(3 июл 2015, 21:00)
6. [автор] (3 июл 2015, 21:01) [0/0] [0] [спам] [под]

МЕГАКОДЫРЬ, мне с1 не нужно, мне нужно из а1 в b1

7. [автор] (3 июл 2015, 21:02) [0/0] [0] [спам] [под]

Саке, т что ты скопировал с учебника? К теме это отношения не имеет.

8. (3 июл 2015, 21:10) [0/0] [0] [спам] [под]

Аффтар, твой вопрос придельно не понятен *

9. [автор] (3 июл 2015, 21:15) [0/0] [0] [спам] [под]

Kasane Teto, ну иди в школу учись*

10. (3 июл 2015, 21:20) [0/0] [0] [спам] [под]

http://politerm.com.ru/zuludoc/spatial_query_sql.htm

Афтар погуглить не пробовал

Подписаны: 0
Скачать тему | Файлы темы | Фильтр сообщений