2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
1

Два запроса в одном

09.02.2016, 12:57. Показов 5198. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
К теме Как будет выглядеть следующий запрос

Имеем те же 3 таблицы

Таблица 1 НАИМЕНОВАНИЯ:
id name
1 знач1
2 знач2

Таблица 2 КАТЕГОРИИ:
id cat
1 кат1
2 кат2

Таблица 3 КАТ-НАИМ:
id idname idcat
1 idзнач1 idкат2
2 idзнач2 idкат1

Я вывожу список значений таблицы НАИМЕНОВАНИЯ, а еще в этом списке хочу рядом выводить к какой категории относится строка таблицы наименование, т.е. соотнести строка=такаятокатегория. Не могу такой запрос соорудить. Помогите плз.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2016, 12:57
Ответы с готовыми решениями:

Два запроса в одном
Доброго дня Подскажите Как объединить два запроса и можно ли в моем случае это ? Мне нужно...

Два запроса в одном
Объясните пожалуйста, как запихать два запроса в один файл.. Постройте запрос, позволяющий...

Два ajax запроса в одном
Здравствуйте! Не давно начал осваивать JQuery и пока все получается. Но есть один момент...

Два запроса в одном коннекте
Мне нужно выполнить 2 разных действия в БД в одном коннекте. Сначала записать строку в таблицу, а...

16
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
09.02.2016, 13:18 2
Можно сделать через 2 явных или не явных объединения.
В первом объединяем НАИМЕНОВАНИЯ и КАТ-НАИМ, во втором НАИМЕНОВАНИЯ+КАТ-НАИМ и КАТЕГОРИИ, или наоборот.
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
09.02.2016, 13:20  [ТС] 3
Цитата Сообщение от Meridian21 Посмотреть сообщение
Можно сделать через 2 явных или не явных объединения.
ну и как это будет выглядеть?
SELECT....
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
09.02.2016, 14:11 4
Лучший ответ Сообщение было отмечено Zhdanoff как решение

Решение

Видимо так:
SQL
1
2
3
SELECT v.name, w.cat FROM КАТЕГОРИИ w JOIN
(SELECT q.name, e.idcat FROM НАИМЕНОВАНИЯ q JOIN КАТ-НАИМ e ON q.id=e.idname) v
ON w.id=v.idcat
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
09.02.2016, 14:24  [ТС] 5
Цитата Сообщение от Meridian21 Посмотреть сообщение
Видимо так:
что означают эти буквы перед именами полей v, q , w, e?
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
09.02.2016, 14:40 6
Лучший ответ Сообщение было отмечено Zhdanoff как решение

Решение

Это алиасы таблиц, они не обязательны, просто для удобства.

Добавлено через 48 секунд
а буква v - это "имя подзапроса", с котором идет второе объединение.

Добавлено через 3 минуты
Но можно это реализовать через неявное объединение, как-то так вроде:

SQL
1
SELECT q.name, w.cat FROM КАТЕГОРИИ q, НАИМЕНОВАНИЯ w, КАТ-НАИМ e WHERE e.idcat=w.id AND e.idname=q.id
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
09.02.2016, 15:18  [ТС] 7
Цитата Сообщение от Meridian21 Посмотреть сообщение
Это алиасы таблиц, они не обязательны, просто для удобства.
а почему мы выбираем v.name, w.cat

"FROM КАТЕГОРИИЦ"

если там только cat есть?
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
09.02.2016, 15:27 8
Я же дописал, про v.
w - это алиас таблицы КАТЕГОРИИ. v - это алиас подзапроса. В внешнем запросе, который строит требуемый вывод нужно поле, которое есть в внутреннем запросе. Вот, чтобы вытащить в вывод внешнего поле из внутреннего, используется алиас v и по нему обращаемся к полю name.
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
09.02.2016, 15:54  [ТС] 9
Цитата Сообщение от Meridian21 Посмотреть сообщение
w - это алиас таблицы КАТ
а есть более длинный вариант, но проще, не могу переварить этот
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
09.02.2016, 15:59 10
Лучший ответ Сообщение было отмечено Zhdanoff как решение

Решение

Служит для того, чтобы к таблице в пределах данного SQL-запроса можно было обращаться по другому имени.
Обычно применяется:
а) в целях повышения читаемости запросов
б) в целях многократного использования одной и той же таблицы в одном запросе.
в) для именования подзапросов.
Взято с другого форума аналогичной тематики. Как вариант объяснения.
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
09.02.2016, 22:08  [ТС] 11
Цитата Сообщение от Meridian21 Посмотреть сообщение
Взято с другого форума аналогичной тематики. Как вариант объяснения.
"SELECT category.id, category.name, catpag.idcat, catpag.idpage, pages.id, pages.title, pages.meta_d FROM category, catpag, pages WHERE catpag.idcat = category.id, catpag.idpage = pages.id "

вот просто и понятно, пришлось перерыть докуя сайтов, где нормально описано, но все ровно спасибо, что не прошел мимо как грится

сори, немного не то
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
10.02.2016, 09:26 12
Такой вариант тоже верный, просто записан иначе. В данном случае, идет "явное" указание таблицы, в которой присутствует поле. category.id - обращение к таблице category, поле id. Такая запись вполне себе нормальная, но это не алиас. Алиас - это типа "кличка" или краткое имя таблицы (или подзапроса). И записав раз category v (имя алиаса может быть любым), мы можем обращаться к таблице по нему, т.е. v.id. Запись получается короче, на мой взгляд, более читаемая, да и быстрее можно записать поля, которые нужны для вывода.
А вообще, можно еще указывать и имя схемы перед именем таблицы. Разницы в результирующем наборе от этого не будет.
0
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
10.02.2016, 09:38  [ТС] 13
Цитата Сообщение от Meridian21 Посмотреть сообщение
Такой вариант тоже верный,
не сработало как надо, отобразились только те записи у которых есть категории, как изменить этот запрос, чтобы отображались и строки БЕЗ категорий?

Добавлено через 10 минут
Цитата Сообщение от Meridian21 Посмотреть сообщение
Разницы в результирующем наборе от этого не будет
уже 2й день е*усь над каким то запросом
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
10.02.2016, 09:46 14
А так что выводит?
Наименования - names
Категории - cats
Кат-наим - cat_names
---
SQL
1
2
3
SELECT val.name, cats.cat FROM cats JOIN
(SELECT names.name, cat_names.idcat FROM names, cat_names WHERE names.id=cat_names.idname) val
ON cats.id=val.idcat
Добавлено через 45 секунд
val - это имя подзапроса (оно произвольное) и по нему идет обращение к полю idcat.
1
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 174
10.02.2016, 09:52  [ТС] 15
Цитата Сообщение от Meridian21 Посмотреть сообщение
А так что выводит?
"SELECT t1.id, t1.title, t1.meta_d, t2.id, t2.name, t3.idcat, t3.idpage
FROM pages t1
LEFT JOIN catpag t3 ON t3.idpage = t1.id
LEFT JOIN category t2 ON t2.id = t3.idcat"

все заработало
я выбрал все поля нужные
0
Zero day
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
10.02.2016, 09:57 16
Верно, или через left join, который выбирает то, что равно и то, что справа null. Так даже лучше.
0
0 / 0 / 0
Регистрация: 26.09.2017
Сообщений: 1
18.01.2018, 16:37 17
Добрый день. Помогите с запросом. Opencart. Нужно отключить товары(status=0) у определенных категорий товаров. Таблицы соотносятся 1 ко множеству(oc_product -> oc_product_to_category).
Такой запрос возвращает 0. Думаю нужно как-то 1к1. Наверное.
MySQL
1
UPDATE oc_product, oc_product_to_category SET oc_product.status=0 AND oc_product.date_modified='2018-01-19 00:00:00' WHERE oc_product.product_id=oc_product_to_category.product_id and oc_product_to_category.category_id=20 and oc_product_to_category.main_category=1
Добавлено через 43 минуты
Думать полезно. Всем спасибо.
MySQL
1
UPDATE oc_product SET oc_product.status=0 AND oc_product.date_modified='2018-01-19 00:00:00' WHERE oc_product.product_id=any(SELECT product_id from oc_product_to_category where category_id=88 and main_category=1)
0
18.01.2018, 16:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2018, 16:37
Помогаю со студенческими работами здесь

Два запроса к одной таблице в одном
Здравствуйте. Имеется две таблицы: create table player ( id int identity(1, 1) primary key,...

Два http get запроса в одном AsyncTask
Добрый день, при вызове двух последовательных http get запросов происходит следующая ситуация:...

Можно ли вывести два запроса в одном?
можно ли вывести строки двух таблиц с помощью запроса, к примеру: select row1, row2 from tab1;...

Как составить два запроса в одном шаге ADOQuery1?
Вот так все работает: DataModule1->ADOQuery1->Close();...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru