Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
sm190
4 / 4 / 1
Регистрация: 30.09.2012
Сообщений: 28
1

Нужно выбрать все товары из тех чеков, в которых есть товар с определенным id

29.08.2014, 10:32. Просмотров 1132. Ответов 3
Метки нет (Все метки)

Есть три таблицы: товары(t), чеки(c), продажи(p).
В таблице p хранятся данные продаж товаров по чекам: p.id, p.t_id, p.c_id (где p.t_id соответствует t.id, а p.c_id соответствует c.id)
Нужно выбрать все товары из тех чеков, в которых есть товар с определенным id

Результат следующего запроса верный, но время выборки 2-3 сек:
Oracle 11 SQL
1
SELECT * FROM p JOIN c ON p.c_id=c.id WHERE p.c_id IN (SELECT c.id FROM c JOIN p ON p.c_id=c.id WHERE p.t_id=?)
Подскажите, пожалуйста, как составить другой запрос, чтобы уменьшить время выборки
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2014, 10:32
Ответы с готовыми решениями:

[Selectors] Выбрать все div определенного класа, у которых есть непрямые потомки с определенным значением
<div class="question-summary narrow" id="question-summary-66286"> <div...

Найти те магазины, где есть только 1 товар, все товары
Прошу помочь найти ссылку на задачу. (примерное условие) В 3-х магазинах имеются товары: молоко,...

Выбрать все изображения, кроме тех у которых
Мне нужно выбрать из области класса .cards все картинки, у которых opacity!=1; Как можно сделать?...

Выбрать тех пользователей, у которых есть незаполненные (хотя бы один) опросные листы
Доброго времени суток. Есть БД с опросными листами (анкетами) схема данных во вложении....

3
Jefe
267 / 241 / 103
Регистрация: 05.06.2013
Сообщений: 777
29.08.2014, 10:48 2
Лучший ответ Сообщение было отмечено sm190 как решение

Решение

Как я вижу, вам достаточно только таблицы "p" для того, что бы осуществить необходимую вам выборку, все данные есть в ней. "JOIN c" как мне кажется вообще стоит убрать.

MySQL
1
2
3
4
SELECT * FROM p 
WHERE p.c_id IN 
   (SELECT p.c_id FROM p 
   WHERE p.t_id=?);
1
sm190
4 / 4 / 1
Регистрация: 30.09.2012
Сообщений: 28
29.08.2014, 11:01  [ТС] 3
Ну да вы правы, я так тоже пробовал, тоже долго, но я разобрался уже, спасибо, надо джойнить таблицу саму на себя
Oracle 11 SQL
1
SELECT p FROM p AS p1 LEFT JOIN p AS p2 ON p1.c_id=p2.c_id WHERE p1.t_id=?
Как тут тему закрыть?))
0
Памирыч
Почетный модератор
21164 / 8893 / 1080
Регистрация: 11.04.2010
Сообщений: 11,012
02.09.2014, 08:05 4
Цитата Сообщение от sm190 Посмотреть сообщение
Как тут тему закрыть?))
Никак. Ее еще будут апать другие пользователи, если им потребуется уточнение
0
02.09.2014, 08:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2014, 08:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

LINQ to XML выбрать все элементы у которых есть определенный аттрибут
Здарвствуйте подскажите как с помошью LINQ to XML выбрать все элементы у которых есть аттрибут с...

Селекторы CSS: выбрать все <li> в которых есть ссылка, имеющая атрибут class
Всем привет! Помогите составить селектор. Мне нужно выбрать все &lt;li&gt; в которых есть ссылка, имеющая...

В файле query выбрать все строки, в которых в названии улицы есть цифры
Помогите пожалуйста, разбираюсь с командой grep в терминале, не могу выполнить задание: В файле...

SQL: выбрать склады, на которых отсутствует определенный товар
Я что-то совсем торможу :( Есть главная таблица - &quot;склады&quot; и подчиненная - &quot;товары&quot;. Как написать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.