Выборка из БД

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Выборка из БД

Re: Выборка из БД

PuhKMV » 26 мар 2013, 12:36

Подскажите пожалуйста, как мне написать в Access выражение или созлать запрос: чтобы при выборе в форме, значения элемента Поле со списком (строка - КодТарифа) и значения Поля со списком столбца (Разряд) из таблицы (Тарифы), в поле (Сумма) появлялось значение равное значению на пересечении строки и столбца.

Re: Выборка из БД

snaimw » 23 ноя 2012, 12:30

Нашёл решение

Код: Выделить всё

SELECT * FROM catalog AS c 
JOIN property_value AS cv ON(c.id = cv.catalog_id)
AND cv.property_id = 5 AND cv.VALUE=1
JOIN property_value AS cv1 ON(c.id = cv1.catalog_id)
AND cv1.property_id = 4 AND cv1.VALUE=6

Re: Выборка из БД

AiK » 23 ноя 2012, 10:12

Я вот про что. У тебя по условиям получается, что в таблице property_value у одного и того же товара может быть одна и та же характеристика, но с разными значениями. Т.е. нарушена нормализация. За один плоский запрос тебе данные не извлечь, потому что если поставить IN и там, то у тебя будут выбраны пары property_id=3 равно value=2 и property_id=14 равно value=15.
Если у тебя счётное количество свойств, то тебе подходит UNION (склейка результатов двух последовательных запросов в один общий)

Код: Выделить всё

SELECT * FROM catalog AS c LEFT JOIN property_value AS pv ON (c.id= pv.catalog_id) WHERE property_id  = 3 AND VALUE = 15
UNION 
SELECT * FROM catalog AS c LEFT JOIN property_value AS pv ON (c.id= pv.catalog_id) WHERE property_id  = 14 AND VALUE = 2

Re: Выборка из БД

snaimw » 22 ноя 2012, 12:03

Мне нужно отфильтровать товары по разным свойствам
например
свойство property_id=3 равно value=15 и
свойство property_id=14 равно value=2
за 1 запрос

Re: Выборка из БД

AiK » 22 ноя 2012, 08:48

Ответ в лоб - используй оператор IN

Код: Выделить всё

 SELECT * FROM catalog AS c LEFT JOIN property_value AS pv ON (c.id= pv.catalog_id) WHERE property_id IN (1,2,3,4,5) AND VALUE = 2
Только у тебя есть ещё условие AND которое вызывает жуткие сомнения в понимании того, что написано. Условия попытайся сформулировать словами.

Выборка из БД

snaimw » 21 ноя 2012, 20:55

Добрый вечер, прошу помочь решить одну задачку. Делаю каталог товаров, не получается выборка по условию
Таблица товаров - catalog
- id
- scu
- category_id
- name
Таблица характеристик - property
- id
- name
Таблица значения характеристик товаров - property_value
- id
- property_id - id характеристики
- catalog_id - id товара
- value - значение
Нужно получить товары характеристики которых соответствуют условию

например
SELECT * FROM catalog AS c LEFT JOIN property_value AS pv ON (c.id= pv.catalog_id) WHERE property_id=1 AND VALUE = 2
отфильтровать по 1 характеристике получается, а как отфильтровать по нескольким?

Вернуться к началу