Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 22

Выборка значений из таблицы

13.04.2017, 22:55. Показов 2585. Ответов 8

Студворк — интернет-сервис помощи студентам
Имеется таблица (записи не имеющие parentCode являются классами, а записи имеющие parentCode являются операциями, которые относятся к соответствующему классу):
SQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE CashOperation (
    cashOperationCode INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(25),
    parentCode INT,
    operationType INT,
    timeNorm VARCHAR(10),
    visitCond VARCHAR(10),
    FOREIGN KEY (parentCode)
        REFERENCES CashOperation (cashOperationCode)
);
В программе вводится значение поля name, нужно произвести поиск:
1. если совпадения только в классах (parentCode is null), то вывести подходящие названия классов и только те операции, которые соответствуют найденным классам.

2. если совпадения только в операциях(parentCode is not null), то вывести подходящие названия операций и только те классы, которые соответствуют найденным операциям.

3. если совпадения одновременно в операциях и в классах, то выполнить пункт 1.

Например мы заполнили таблицу записями:
SQL
1
2
3
4
5
6
INSERT INTO CashOperation (`name`) VALUES ('Обменные');
INSERT INTO CashOperation (`name`) VALUES ('Кредитные');
INSERT INTO CashOperation (`name`, parentCode) VALUES ('обмен долларов', 1);
INSERT INTO CashOperation (`name`, parentCode) VALUES ('обмен евро', 1);
INSERT INTO CashOperation (`name`, parentCode) VALUES ('Кредит месячный', 2);
INSERT INTO CashOperation (`name`, parentCode) VALUES ('Рассрочка без процентов', 2);
При вводе в поиск "кред" должно вывести записи: Кредитные, Кредит месячный, Рассрочка без процентов.

Есть часть запроса, осталось только дописать условия вместо "...":

SQL
1
2
3
4
5
6
7
8
SELECT 
    *
FROM
    CashOperation
WHERE
    (parentCode IS NULL
        AND `name` LIKE '%Кред%' AND ...)
        OR (parentCode IS NOT NULL AND ...)
Два дня мучаюсь, не могу справиться.

P.s. структуру таблицы и "готовую" часть запроса изменять нельзя
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2017, 22:55
Ответы с готовыми решениями:

Выборка определенных значений из таблицы
Доброго времени суток. Необходимо сделать выборку из базы определенных значений. То есть. Есть таблица(массив) с парами значений...

Выборка значений из таблицы подстановок по условию
Здравствуйте. Есть таблица: список мониторов, в этой таблице имеются поля: наименование монитора, заводской, инвентарный. Все...

Выборка данных из таблицы по конкретному массиву значений
Доброго времени суток! Прошу вашей помощи или совета по следующему вопросу. Предполагаем, что в столбце А находятся только...

8
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
14.04.2017, 13:31
'Рассрочка без процентов' никак не подойдет под условие `name` LIKE '%Кред%', поэтому в таком примитивном виде вряд ли запрос заработает.
Учитывая, что таблица связана сама с собой, глупо не связать их и в запросе. Поэтому ясный и прозрачный запрос явно должен иметь другую структуру, поэтому "пилите, Шура, пилите ..."
Цитата Сообщение от DedSoul Посмотреть сообщение
Два дня мучаюсь, не могу справиться.
Когда откажетесь от
Цитата Сообщение от DedSoul Посмотреть сообщение
"готовую" часть запроса изменять нельзя
отпишитесь
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
14.04.2017, 15:33
mysql обсуждается в другом форуме.
а по существу, вам нужен иерархический запрос с дополнительным условием относительно "name".
0
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 22
15.04.2017, 14:55  [ТС]
а как тогда можно описать этот запрос?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
15.04.2017, 14:57
так MySQL или PostgreSQL?
0
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 22
15.04.2017, 15:00  [ТС]
PostgreSQL
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
15.04.2017, 15:10
Лучший ответ Сообщение было отмечено DedSoul как решение

Решение

даже с with он у меня получился достаточно громоздкий
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
WITH co AS (
  SELECT cl.name ClassName, op.name OpName
  FROM 
    CashOperation cl 
    LEFT JOIN CashOperation op ON cl.cashOperationCode = op.parentCode
  WHERE
    cl.parentCode IS NULL
  UNION 
  SELECT cl.name ClassName, op.name OpName
  FROM 
    CashOperation op 
    JOIN CashOperation cl ON cl.cashOperationCode = op.parentCode
)
  SELECT OpName FROM co WHERE OpName LIKE '%Кред%' AND NOT EXIST (
    SELECT ClassName FROM op WHERE ClassName LIKE '%Кред%'
  ) 
  UNION
  SELECT ClassName FROM co WHERE OpName LIKE '%Кред%' AND NOT EXIST (
    SELECT ClassName FROM op WHERE ClassName LIKE '%Кред%'
  ) 
  UNION  
  SELECT ClassName FROM co WHERE ClassName LIKE '%Кред%'
  UNION
  SELECT OpName FROM co WHERE ClassName LIKE '%Кред%' AND OpName IS NOT NULL
P.S. У меня выводятся только name, как в задании, а не * FROM CashOperation
1
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 22
15.04.2017, 15:11  [ТС]
Огромное спасибо, добрый человек)
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
15.04.2017, 15:23
Ты проверь сначала его работоспособность, запрос писался на коленке и в блокноте

Добавлено через 8 минут
в CTE достаточно первой части. Вторая ничего не дает. У меня там сначала сразу с '%Кред%' сравнение стояло, но после того, как убрал, стоит и вовсе убрать
SQL
1
2
3
4
5
6
7
8
WITH co AS (
  SELECT cl.name ClassName, op.name OpName
  FROM 
    CashOperation cl 
    LEFT JOIN CashOperation op ON cl.cashOperationCode = op.parentCode
  WHERE
    cl.parentCode IS NULL
 )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2017, 15:23
Помогаю со студенческими работами здесь

Выборка из 1 таблицы суммы значений, удовлетворяющие условиям
Здравствуйте, уважаемые форумчане. Весь день ломал голову, но так и не победил. Суть вопроса такова: возьмем 4 поля таблицы - 0....

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

Выборка случайных значений из таблицы средствами PHP
Здравствуйте. Скажите пожалуйста, возможно ли средствами PHP вывести случайные значения из MySQL? Принцип реализации...

Выборка сразу нескольких значений с одной таблицы
Добрый день. Нужна помощь. Есть ужасная таблица с кучей информации. Хочу вытянуть определенные данные в правильном порядке. есть mysql...

Выборка уникальных значений из одной таблицы и вставка в другую
Добрый день .Выбираю уникальные значения из одной таблицы и вставляю в другую INSERT INTO table1(title)VALUES(SELECT DISTINCT...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru