SELECT id
FROM table1
GROUP BY id
HAVING Max(var1)=1 AND Max(var2)=1 AND Max(var3)=1
Помогите сформировать SQL запрос
id | var1 | var2 | var3
1 | 1 | 0 | 0
1 | 0 | 1 | 0
1 | 0 | 0 | 1
2 | 1 | 0 | 0
2 | 0 | 1 | 0
2 | 0 | 0 | 0
Нужно вывести все id для которых (в разных строках) все var1, var2, var3 равны 1.
В данном примере правильным выводом должен быть id=1
id=2 не подходит т.к. с таким индексом нет var3=1
Заранее спасибо, а то запарился с таким индексом..
Код:
Не я топикстартер, но пойду изучать group by и having
у меня работает) проверил на MSSQL. у вас какая СУБД?
Есть вот такая таблица:
CREATE TABLE IF NOT EXISTS `tbl_catalog_FieldVal` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_product` int(11) NOT NULL,
`id_field` int(11) NOT NULL,
`id_part` int(11) NOT NULL,
`type` text NOT NULL,
`val` text NOT NULL,
`position` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
Нужно вытащить из нее значения столба id_product, которому будут например соответствовать вот такие значения других столбцов:
(id_field=70 AND val=28) AND
(id_field=28 AND position=0 AND val>=100)
Вот некоторые данные из таблицы:
INSERT INTO `tbl_catalog_FieldVal` (`id`, `id_product`, `id_field`, `id_part`, `type`, `val`, `position`) VALUES
(1012, 606, 70, 15, 'sel', '28', 0),
(1062, 605, 70, 15, 'sel', '28', 0),
(2700, 726, 70, 53, 'sel', '28', 0),
(941, 55, 28, 15, 'txt', '120', 0),
(971, 240, 28, 15, 'txt', '110', 0),
(1489, 719, 28, 13, 'txt', '100', 0),
(2109, 634, 28, 35, 'txt', '110', 0),
(2143, 721, 28, 37, 'txt', '150', 0),
(186, 225, 35, 7, 'check', '1', 0),
(187, 225, 37, 7, 'check', '0', 0),
(313, 225, 31, 7, 'sel', '14', 0),
(2113, 634, 42, 36, 'txt', '56', 2);
ничего не понятно, что нужно
Нужно вытащить из таблицы tbl_catalog_FieldVal все значения id_product без дублей, которые бы одновременно удовлетворяли следующим критериями:
1. (id_field=70 AND val=28)
2. (id_field=28 AND position=0 AND val>=100).
Буду признателен, если вы скажите как вытащить id_product для конкретно этого примера, по аналогии я потом соображу как вытаскивать другие комбинации данных.
1. (id_field=70 AND val=28)
2. (id_field=28 AND position=0 AND val>=100).
Код:
SELECT
id_product
FROM tbl_catalog_FieldVal
WHERE
id_field IN (SELECT val FROM tbl_catalog_FieldVal WHERE id_field=70)
AND position=0
AND val>=100
id_product
FROM tbl_catalog_FieldVal
WHERE
id_field IN (SELECT val FROM tbl_catalog_FieldVal WHERE id_field=70)
AND position=0
AND val>=100
Цитата: grishkov
Нужно вытащить из таблицы tbl_catalog_FieldVal все значения id_product без дублей, которые бы одновременно удовлетворяли следующим критериями:
1. (id_field=70 AND val=28)
2. (id_field=28 AND position=0 AND val>=100).
1. (id_field=70 AND val=28)
2. (id_field=28 AND position=0 AND val>=100).
может я чего-то не понимаю, но насколько я знаю логику
id_field=70 и id_field=28 одновременно быть не могут,
равно как val=28 и val>=100
(id_field=70 AND val=28) AND
(id_field=28 AND position=0 AND val>=100)
а
(id_field=70 AND val=28) OR
(id_field=28 AND position=0 AND val>=100)
???????
Цитата: grishkov
без дублей
DISTINCT
Код:
SELECT DISTINCT `id_product` FROM `tbl_catalog_FieldVal`
WHERE (`id_field`='70' AND `val`='28') OR (`id_field`='28' AND `position`='0' AND `val`>='100')
WHERE (`id_field`='70' AND `val`='28') OR (`id_field`='28' AND `position`='0' AND `val`>='100')
я уже пытался объяснить это ТС, но похоже тут требуется что-то другое, а что именно пока непонятно :)