Skip to content

Instantly share code, notes, and snippets.

@aminin
Created June 28, 2012 14:49
Show Gist options
  • Select an option

  • Save aminin/3011772 to your computer and use it in GitHub Desktop.

Select an option

Save aminin/3011772 to your computer and use it in GitHub Desktop.
Приложение к задаче по SQL

Приложение к задаче по SQL

Задача

В БД есть пользователи и группы, между ними связть многие ко многим, нужно выбрать группы, где есть и Коля и Петя.

Порядок решения

  • Создайте БД

  • Выполните скрипт с паролем qwerty

    psql -h localhost -U example_user -W example_db < create.sql

  • Создайте файл с решением

    vim solution.sql

  • Проверьте решение

    psql -h localhost -U example_user -W example_db < solution.sql

CREATE TABLE users (
id BIGSERIAL,
name VARCHAR(32),
PRIMARY KEY (id)
);
CREATE TABLE groups (
id BIGSERIAL,
name VARCHAR(32),
PRIMARY KEY (id)
);
CREATE TABLE users_groups (
user_id BIGINT,
group_id BIGINT,
PRIMARY KEY (user_id, group_id),
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
FOREIGN KEY (group_id) REFERENCES groups (id) ON DELETE CASCADE
);
INSERT INTO users (name) VALUES ('Вася');
INSERT INTO users (name) VALUES ('Петя');
INSERT INTO users (name) VALUES ('Антон');
INSERT INTO users (name) VALUES ('Сергей');
INSERT INTO groups (name) VALUES ('Админы');
INSERT INTO groups (name) VALUES ('Программисты');
INSERT INTO groups (name) VALUES ('Продавцы');
INSERT INTO groups (name) VALUES ('Гетеросексуалисты');
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Антон'), (SELECT id FROM groups WHERE name = 'Программисты'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Антон'), (SELECT id FROM groups WHERE name = 'Гетеросексуалисты'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Петя'), (SELECT id FROM groups WHERE name = 'Продавцы'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Петя'), (SELECT id FROM groups WHERE name = 'Гетеросексуалисты'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Вася'), (SELECT id FROM groups WHERE name = 'Продавцы'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Вася'), (SELECT id FROM groups WHERE name = 'Гетеросексуалисты'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Сергей'), (SELECT id FROM groups WHERE name = 'Программисты'));
INSERT INTO users_groups (user_id, group_id) VALUES ((SELECT id FROM users WHERE name = 'Сергей'), (SELECT id FROM groups WHERE name = 'Админы'));
DROP TABLE users CASCADE;
DROP TABLE groups CASCADE;
DROP TABLE users_groups;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment