none
Какой будет Select(представление) в данном варианте SQL базы? RRS feed

  • Вопрос

  • Имеется база данных содержашая в себе 4-е таблицы с полями:
    1. таблица: Проводник
    Фио проводника
    номер паспорта проводника(внешний ключ)
    адресс проводника
    2. таблица: вагон_проводник
    номер паспорта(ключ)
    номер вагона(ключ)
    3. таблица Вагон
    номер вагона
    тип вагона
    4. Таблица пассажир
    Номер паспорта пассажира
    номер вагона пассажира
    Фио пассажира
    Место назначение
    Номер места

    Диаграмма показана на рисунке:


    Задача:создать представления(Views) позволяюшие получить:
    1. Список пассажиров и проводников, таких что пассажиры едут в тотже город где живет проводник его вагона(или хотябы один если их несколько)
    2. Список вагонов(номер и тип), где нет пассажиров с совпадаюшими ФИО
    13 января 2011 г. 19:53

Ответы

  • use tempdb
    go
    create table conductor
    	(
    		conductor_id int identity,
    		conductor_name varchar(55),
    		pass_number int,
    		address_city varchar(55)
    	)
    go
    create table conductor_to_car(car_id int, conductor_id int)
    go
    create table car(car_id int identity, car_type varchar(55))
    go
    insert into car values('Coach'),('Dining car'),('Sleeping car')
    go
    create table passenger
    	(
    		passenger_id int identity,
    		car_id int,
    		passenger_name varchar(55),
    		target_city varchar(55)
    	)
    go
    insert into passenger values
    (1,'John','Moscow'),
    (2,'Micke','Berlin'),
    (3,'Elsa','Paris'),
    (2,'Micke','Bonn')
    go
    --query 1
    select
    	pk.address_city,
    	pk.conductor_name,
    	pr.passenger_name
    from
    	passenger pr inner join conductor_to_car ctc
    	on pr.car_id = ctc.car_id
    	inner join conductor pk
    	on ctc.conductor_id = pk.conductor_id
    where
    	pr.target_city = pk.address_city
    go
    
    --query 2
    select *
    from
    	car lc
    where
    	lc.car_id not in
    	(
    	
    		select
    			distinct pr1.car_id
    		from
    			passenger pr1 inner join passenger pr2
    			on pr1.passenger_name = pr2.passenger_name
    			and pr1.car_id = pr2.car_id
    			and pr1.passenger_id != pr2.passenger_id	
    	)
    go
    

    Gruß Yury
    • Предложено в качестве ответа Naomi N 16 января 2011 г. 23:42
    • Помечено в качестве ответа Yuriy Lenchenkov 28 января 2011 г. 10:20
    16 января 2011 г. 10:57

Все ответы

  • use tempdb
    go
    create table conductor
    	(
    		conductor_id int identity,
    		conductor_name varchar(55),
    		pass_number int,
    		address_city varchar(55)
    	)
    go
    create table conductor_to_car(car_id int, conductor_id int)
    go
    create table car(car_id int identity, car_type varchar(55))
    go
    insert into car values('Coach'),('Dining car'),('Sleeping car')
    go
    create table passenger
    	(
    		passenger_id int identity,
    		car_id int,
    		passenger_name varchar(55),
    		target_city varchar(55)
    	)
    go
    insert into passenger values
    (1,'John','Moscow'),
    (2,'Micke','Berlin'),
    (3,'Elsa','Paris'),
    (2,'Micke','Bonn')
    go
    --query 1
    select
    	pk.address_city,
    	pk.conductor_name,
    	pr.passenger_name
    from
    	passenger pr inner join conductor_to_car ctc
    	on pr.car_id = ctc.car_id
    	inner join conductor pk
    	on ctc.conductor_id = pk.conductor_id
    where
    	pr.target_city = pk.address_city
    go
    
    --query 2
    select *
    from
    	car lc
    where
    	lc.car_id not in
    	(
    	
    		select
    			distinct pr1.car_id
    		from
    			passenger pr1 inner join passenger pr2
    			on pr1.passenger_name = pr2.passenger_name
    			and pr1.car_id = pr2.car_id
    			and pr1.passenger_id != pr2.passenger_id	
    	)
    go
    

    Gruß Yury
    • Предложено в качестве ответа Naomi N 16 января 2011 г. 23:42
    • Помечено в качестве ответа Yuriy Lenchenkov 28 января 2011 г. 10:20
    16 января 2011 г. 10:57
  • byshido, вам помогло предложенное решение?
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    18 января 2011 г. 12:51
  • Уважаемый пользователь!
    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    24 января 2011 г. 10:58