Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:14 27.04.24 
Клубове/ Компютри и Интернет / Бази данни Пълен преглед*
Информация за клуба
Тема Проблем с (наглед проста) заявка
Автор Schultz (Ignorant)
Публикувано19.09.05 15:31  



Вероятно сте срещали често подобен проблем:

Имам главна таблица, която описва обектите, които ме интересуват - да речем служители. Имам таблица, която описва възможните стойности на едно от свойствата на обектите - да речем владеене на чужд език. И естествено имам таблица, която описва връзката между първите две - N:N (съвсем стандартна схема за случая).

Ето примерна схема (за PostgreSQL):


CREATE TABLE employee (
employee_id serial PRIMARY KEY,
name varchar(20)
);

CREATE TABLE skill (
skill_id serial PRIMARY KEY,
name varchar(20)
);

CREATE TABLE employee_skill (
employee_id integer,
skill_id integer,
CONSTRAINT employee_skill_employee_id_fkey FOREIGN KEY (employee_id) REFERENCES employee(employee_id),
CONSTRAINT employee_skill_skill_id_fkey FOREIGN KEY (skill_id) REFERENCES skill (skill_id),
CONSTRAINT employee_skill_employee_id_key UNIQUE (employee_id, skill_id)
);



Бих искал да изведа всички служители, които владеят два определени езика. Следната заявка прави нещо подобно, но хич не ми харесва (като я видите, ще разберете защо):



SELECT
е.employee_id,
е.name,
COUNT(s.skill_id)
FROM
employee AS e
INNER JOIN
employee_skill AS es
ON
e.employee_id=es.employee_id
INNER JOIN
skill AS s
ON
s.skill_id=es.skill_id AND s.skill_id IN (1, 2)
GROUP BY
e.employee_id,
e.name
HAVING
COUNT(s.skill_id)>=2;


Тук "(1, 2)" са идентификаторите за два от езиците (да речем немски и френски), взети от таблицата "skill". А двойката в "COUNT(s.skill_id)>=2" е защото търсените умения са два броя.


Някакви идеи за по-проста и универсална заявка?

---
What's worse - ignorance or indifference? Who knows? Who cares?

Редактирано от Schultz на 19.09.05 15:37.



Цялата тема
ТемаАвторПубликувано
* Проблем с (наглед проста) заявка Schultz   19.09.05 15:31
. * Re: Какво разбираш под "универсална"? salle   19.09.05 16:01
. * Re: Какво разбираш под "универсална"? Schultz   19.09.05 16:50
. * Re: Какво разбираш под "универсална"? BullDog   19.09.05 21:42
. * Re: Какво разбираш под "универсална"? Schultz   20.09.05 14:50
. * Re: Какво разбираш под "универсална"? wqw   20.09.05 15:08
. * Re: Какво разбираш под "универсална"? Schultz   20.09.05 15:10
. * Re: Какво разбираш под "универсална"? wqw   20.09.05 15:23
. * Re: Какво разбираш под "универсална"? Schultz   20.09.05 17:08
. * Re: Какво разбираш под "универсална"? phpGuru   21.09.05 11:10
. * Re: Какво разбираш под "универсална"? BullDog   20.09.05 23:36
. * Тъп въпрос bira_more   20.09.05 20:00
. * Re: Надявам се да си се ориентирал вече salle   21.09.05 11:03
. * Re: Надявам се да си се ориентирал вече wqw   21.09.05 13:11
. * Re: Забравяш, че човека питаше за PostgreSQL :) salle   21.09.05 15:47
. * Re: Забравяш, че човека питаше за PostgreSQL :) wqw   21.09.05 17:13
. * Някои уточнения Schultz   21.09.05 15:55
. * Re: Някои уточнения phpGuru   21.09.05 17:16
. * Re: Някои уточнения wqw   21.09.05 17:29
. * Re: Чакай малко ... salle   21.09.05 18:41
. * Re: едно коренно различно решени (почти :-)) phpGuru   22.09.05 12:35
. * Re: ето изцяло по-различния вариант :-) phpGuru   22.09.05 12:50
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.