2013-11-18 3 views
0

У меня есть две таблицы с именем person и person_sibling. Таблица person_sibling содержит идентификатор родственника, который относится к родному брату человека (например: родственный брат SANGEETHA - SURESH). Мне нужно получить все имена, возраст которых старше их брачного возраста. Данные таблицы приведены нижеМой запрос sql с двумя таблицами

Person стол:

NAME  AGE FNAME   ID GENDER 

SANGEETHA 20 PONNURANGAM  2 FEMALE 
SARANYA  22 CHOKALINGAM  3 FEMALE 
KANNA  22 ALAGRI   4 MALE 
LAVANYA  21 MUNISWAMI  1 FEMALE 
SURESH  25 PONNURANGAM  20 MALE 
SARALA  26 CHOKALINGAM  21 FEMALE 
KARAN  20 ALAGRI   2 MALE 
ARTHI  20 ALAGRI   25 FEMALE 

person_sibling стол:

ID SIBLING_ID 

2 20 
3 21 
4 25 
4 22 
20 2 
21 3 
25 4 
22 4 
22 25 
25 22 

Я попытался это:

SELECT name 
FROM person p , person_sibling s 
where p.id=s.sibling_id and p.age <=(select age from person where id=s.sibling_id) 

Но я не могу в состоянии возьми. Может кто-то помочь, пожалуйста

+1

Вы можете показать нам, каков ожидаемый результат вашего запроса? –

+0

Просто, чтобы было ясно, вы хотите найти всех людей, у которых есть младший брат (независимо от того, у них также есть более старый) или людей, которые являются старшими братьями (то есть у них нет старшего брата)? –

ответ

1
SELECT p.name 
FROM person p 
inner join person_sibling s on p.id = s.id 
inner join person sp on s.sibling_id = sp.id 
where p.age > sp.age 
+0

нет, что такое s.age? –

+0

wait. Я проверю –

+0

Большое спасибо –

1

Левого соединения может дать вам все человек, которые не имеют старший брат, он будет присоединиться, чтобы найти все старшие брат и сестра, и проверка нуля только даст вам строки, где никто не существует ,

SELECT DISTINCT p.* FROM person p 
LEFT JOIN person_sibling ps ON p.id = ps.id 
LEFT JOIN person s ON ps.sibling_id = s.id AND s.age > p.age 
WHERE s.id IS NULL; 

An SQLfiddle to test with.

Смежные вопросы