Вопрос к "мускулистым" парням!

12
malls
На сайте с 08.08.2005
Offline
255
#11
netwind:
да, декартово произведение я попутал.
из объяснений непонятно что за условие там ставить. то ли OR, то ли AND.

Блин уморился это делать... В общем суть такая, есть примерно такие таблицы:


города
| id | name |
| 1 | town 1 |
| 2 | town 2 |
| 3 | town 3 |

улицы
| id | города.id | name |
| 1 | 2 | street 1 |
| 2 | 2 | street 2 |
| 3 | 3 | street 3 |
| 4 | 2 | street 4 |
| 5 | 3 | street 1 |
| 6 | 1 | street 2 |
| 7 | 1 | street 1 |


люди
| id | улицы.id | name |
| 1 | 1 | Вася |
| 2 | 2 | Петя |
| 3 | 3 | Вася |
| 4 | 4 | Маша |
| 5 | 5 | Нина |
| 6 | 5 | Коля |
| 7 | 7 | Саша |

Задача выбрать из всех таблиц одним запросом, все что:

1. Соответствует списку городов, т.е.

WHERE города.id IN (1,3) (исключаются улицы с id: 1,2,4)

2. Соответствует определенным улицам, т.е.:

AND улицы.name IN (street 1,street 3) (доп. исключаются улицы с id: 6)

3. И при этом живут там определенные люди:

AND люди.name IN (Вася,Коля) (обратно включаются улицы с id: 1)

Итого, если делать:

SELECT люди.name,улицы.name,города.name
FROM города,люди,улицы
WHERE города.id IN (1,3)
AND улицы.name IN (street 1,street 3)
AND люди.name IN (Вася,Коля)

в выборку не попадает первый Вася (что и логично), но он нам нужен, а если делать так:

SELECT люди.name,улицы.name,города.name
FROM города,люди,улицы
WHERE города.id IN (1,3)
AND улицы.name IN (street 1,street 3)
OR люди.name IN (Вася,Коля)

тихо шифером шурша мускуль едет куда-то в сторону абсолютного зависания.

Как быть?

[Удален]
#12

SELECT * FROM `city`,`street`,`people`

WHERE `city`.`id`=`street`.`city_id` AND

`street`.`id`=`people`.`street_id` AND

(

`city`.`id` IN (1,3) AND

`street`.`name`in ('street1','street3')

OR

`people`.`name` in ('Вася','Коля')

)

Так? Единственное условие работоспособности - чтобы не было улиц с городом, которого нет в city и не было людей которые живут на улицах, не указанных в `street`. Здесь например 6я улица не попадет в выборку уже потому что на ней никто не живет (если вы не опечатались в таблице людей)

N
На сайте с 06.05.2007
Offline
419
#13

malls, cнова бредите (противоречите сами себе ) .

просто запишите не списком с комментариями, а в терминах логических отношений и запрос сам напишется.

как это все понимать ?

я понимаю ваш список как (п.1 ) И (п.2) И (п.3) . первый вася всем трем условиям не удовлетворяет, но вы пишите, что первый вася вам нужен.

Кнопка вызова админа ()
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий