SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.12.2009 15:09:49

progi2007
Участник
Зарегистрирован: 01.12.2009
Сообщений: 3

Связь один к одному и условия выборки

Может запарился , но уже более 2-х часов бьюсь не получается составить запрос.

Есть такие таблицы

parents
id
name
_______

children1
parent_id
field2
_______

children2
parent_id
field3
_______

children1 и children2 связаны оношением один к одному c parents.

Как пример возьмем такие тестовые данные

parents
id name

1 lalala
2 blabla
_________

children1
parent_id field2

1 555
_________

children2
parent_id field3

2 777


Так же есть таблица она связана с children2

children2_types
children2_id
type
_____________

В ней такие данные

children2_types
children2_id type
2 1
_______________

Мне надо выбрать все записи из таблицы parents с условием где type = 2. Т.е. в выборку должна попасть строка с id = 1, ну а если type = 1 то обе строки.

Не пинайте строга если не заметил очевидного решения.

Заранее спасибо за помощь.

Неактивен

 

#2 01.12.2009 16:02:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Связь один к одному и условия выборки

Я правильно понимаю, что type есть только у таблицы children2? Если да, то
SELECT p.*
FROM parents p
  JOIN children2 c ON c.parent_id = p.id
  JOIN children2_types t ON c.children2_id = c.id
WHERE t.type = 2;

Неактивен

 

#3 01.12.2009 16:22:49

progi2007
Участник
Зарегистрирован: 01.12.2009
Сообщений: 3

Re: Связь один к одному и условия выборки

paulus написал:

Я правильно понимаю, что type есть только у таблицы children2? Если да, то
SELECT p.*
FROM parents p
  JOIN children2 c ON c.parent_id = p.id
  JOIN children2_types t ON c.children2_id = c.id
WHERE t.type = 2;

Попробовал не заработало, возвращает только одну строку c parent_id = 2, но это и не удивительно так как

SELECT p.*
FROM parents p
  JOIN children2 c ON c.parent_id = p.id

При объединении возвращает одно строку.

Решил это задачку использую union но хочется без него.

Неактивен

 

#4 01.12.2009 16:55:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Связь один к одному и условия выборки

Оно и не может вернуть больше одной строки, т.к. с type=2 есть только одна строка.

Неактивен

 

#5 01.12.2009 17:07:50

progi2007
Участник
Зарегистрирован: 01.12.2009
Сообщений: 3

Re: Связь один к одному и условия выборки

paulus написал:

Оно и не может вернуть больше одной строки, т.к. с type=2 есть только одна строка.

Да, но задача то в другом, надо вывести все строки но только некоторые(вот в этом то и трабла) должны пройти через определенное условие.

Неактивен

 

#6 02.12.2009 15:03:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Связь один к одному и условия выборки

Попробуйте собраться с мыслями и написать словами абсолютно точно критерий
выбора строк. Если нужно выбрать «все» строки, то «некоторые» туда попадут
автоматически (закон логики такой), поэтому можно выбирать просто «все» строки.

Неактивен

 

Board footer

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