SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.10.2009 13:54:00

Oparin
Участник
Зарегистрирован: 24.10.2009
Сообщений: 7

Выборка со связкой из двух таблиц

Таблицы:
ТОВАРЫ- Goods
------------------
Goods_ID | Title
------------------
101 | aaa
102 | bbb
103 | ccc
...


Разделы товаров - Goods_Sections
----------------------
Goods_ID | Section_ID
----------------------
100 | 1
101 | 2
102 | 1
102 | 2
103 | 3
...


Для выборки товаров пренадлежащих любому из указанных разделов, я делаю так:
SELECT DISTINCT Goods.Goods_ID
FROM Goods, Goods_Sections
WHERE (
  Goods.Goods_ID=Goods_Sections.Goods_ID
   AND (
                Goods_Sections.Section_ID = '1'
    OR
    Goods_Sections.Section_ID = '2'
       )
)
Происходит выборка товаров из разделов 1 и 2, т.е. товары ID: 101, 102, 103

Теперь встала задача выбрать товары пренадлежащие зразу двум указанным разделам.
Замена OR на AND не помогла:
SELECT DISTINCT Goods.Goods_ID
FROM Goods, Goods_Sections
WHERE (
  Goods.Goods_ID=Goods_Sections.Goods_ID
   AND (
                Goods_Sections.Section_ID = '1'
    AND
    Goods_Sections.Section_ID = '2'
       )
)

Возращается всегда пустой результат.

Подскажите, возможно ли сделать такую выборку одним запросом?

Неактивен

 

#2 24.10.2009 16:30:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Выборка со связкой из двух таблиц

А какой смысл проводить объединение таблиц, если вы выбираете Goods_ID? Понятно, если бы вам нужен был Title, а такroll

Посмотрите на свою таблицу Goods_Sections.
Если из неё сделать выборку

SELECT Goods_ID FROM Goods_Sections WHERE Section_ID = '1' AND Section_ID = '2';
то естественно будет пустой результат, так как строки удовлетворяющей такому требованию в таблице нетwink

Есть два пути:
1. Самообъединение таблицы
select Goods_ID from Goods_Sections a join Goods_Sections a1 using(Goods_ID) where a.Section_ID=1 and a1.Section_ID=2;

http://dev.mysql.com/doc/refman/5.0/en/join.html

2. Через групповые функции
select Goods_ID,group_concat(Section_ID) x from Goods_Sections group by Goods_ID having x = '1,2';

http://dev.mysql.com/doc/refman/5.0/en/ … oup-concat

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson