SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.12.2009 23:23:07

Eugine
Участник
Зарегистрирован: 10.12.2009
Сообщений: 1

Помогите создать подзапросы

Имеются таблицы вида

create table плательщик
(идентификационный_код char(20) primary key, фамилия char(20), имя char(20),
отчество char(20), индекс int, город char(20), улица char(20), номер_дома char(10),
номер_квартиры char(10), телефон int);

create table место_работы
(идентификационный_код char(20) primary key, название char(20),
должность char(20), зарплата int, индекс int, город char(20), улица char(20), номер_дома char(10),
номер_квартиры char(10) );

create table Имущество
(код_имущества int primary key , тип char(30), идентификационный_код char(20));

create table движимое_имущество
(код_имущества int primary key, модель char(20), объем_двигателя int, год_выпуска int ) inherits (имущество);

create table недвижимое_имущество
(код_имущества int primary key, индекс int, город char(20), улица char(20), номер_дома char(10), номер_квартиры char(10) ) inherits (имущество);

create table место_работы
(идентификационный_код char(20) primary key, название char(20),
должность char(20), зарплата int, индекс int, город char(20), улица char(20), номер_дома char(10),
номер_квартиры char(10) );

1. Нужно выбрать плательщиков (идентификационный код, фамилия, имя), у которых нет недвижимого имущеста, но есть несколько мест работы.

2. Выбрать плательщиков (идентификационный код, фамилия, имя), у которых есть несколько квартир в одном доме.

На счет первого запроса у меня идей нет.
Попробовал сделать второй подзапрос
select a.идентификационный_код, a.фамилия, a.отчество, a.имя from недвижимое_имущество c, плательщик a
where a.идентификационный_код = (
select a.идентификационный_код from плательщик a, недвижимое_имущество c
where c.номер_квартиры<>c.номер_квартиры
and c.улица=c.улица
and c.номер_дома=c.номер_дома
)
но ничего не вышлоsad
Помогите пожалуйста

Отредактированно Eugine (10.12.2009 23:23:56)

Неактивен

 

#2 11.12.2009 02:58:06

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

Re: Помогите создать подзапросы

А тут точно нужны подзапросы?

Запись select a.идентификационный_код from плательщик a, недвижимое_имущество c
where c.номер_квартиры<>c.номер_квартиры
не имеет смысла. Попробуйте выполнить часть приведенного запроса (до where) и наглядно увидите почему.

Не понятно какую нагрузку несут поля типа `номер_квартиры` в таблице `плательщик`. Это информация о чем: месте работы, жительства, имущества, прописки?

1. Объединяете `плательщика` с `местом работы` по идентификационному коду, по нему же группируете и кол-во группируемых строк (т.е. мест работы) >1. Далее левое объединение полученного результата с `имуществом`, условие на тип имущества соответствующий недвижимости и отсутствие совпадений.

2.  Объединяете `плательщика` с `имуществом` по идентификационному коду и с `недвижимостью` по коду имущества. У имущества тип соответствующий недвижимости, а далее группировка по идентификационному коду, городу, улице и номеру дома, и кол-во квартир > 1.

Неактивен

 

Board footer

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