Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запросы join  [new]
timedo
Member

Откуда:
Сообщений: 31
Здрасте, не могу до конца разобраться в запросах.
Есть главная таблица с вторичными ключами:

CREATE TABLE Sname
(
	Code int NOT NULL PRIMARY KEY,
	New bit NOT NULL,
	Sname varchar(100) COLLATE Cyrillic_General_CI_AS NOT NULL,
	Price decimal(18, 2) NULL,
	Pages int NOT NULL,
	Odate DATE NULL,
	Tirage int DEFAULT 5000 NULL,
	Idproduct int REFERENCES Productions(Idproduction) ON UPDATE CASCADE ON DELETE NO ACTION,
);


И таблица продукции:
CREATE TABLE Productions 
(
	Idproduction int NOT NULL PRIMARY KEY,
	Production varchar(25) COLLATE Cyrillic_General_CI_AS NOT NULL,
);


Нужно сделать такой вот запрос: Вывести пары книг, имеющих одинаковое количество страниц. Использовать самообъединения и алиасы

Вот что у меня получилось:
SELECT Productions.Production, Sname.Pages  From Productions, Sname  
	WHERE Sname.Idproduct=Productions.Idproduction AND Sname.Pages
	IN(SELECT Sname.Pages FROM Sname GROUP BY Sname.Pages HAVING COUNT (Sname.Pages)=2 )


Как правильно составить запрос?
9 мар 14, 15:52    [15695612]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
timedo
Member

Откуда:
Сообщений: 31
Вроде понял, нужно вот так:
SELECT s.Sname, s.Pages FROM Sname s INNER JOIN Sname s1 ON s.Pages=s1.Pages


Использовать только 1-ну таблицу у меня только там хранятся страницы. Мне не понятно в задание вот эта часть Вывести пары книг, как это?
9 мар 14, 16:07    [15695643]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
o-o
Guest
timedo
Мне не понятно в задание вот эта часть Вывести пары книг, как это?


куда мир катится?

пусть дано
книга кол-во страниц
A 100
B 100
C 100
D 200
тогда "пары книг, имеющих одинаковое количество страниц", это:
A,B
A,C
B,C
9 мар 14, 17:42    [15695847]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
timedo
Member

Откуда:
Сообщений: 31
не могу понять почему вот этот запрос не работает:

SELECT s.Sname, s1.Pages FROM Sname s, Sname s1 WHERE EXISTS(SELECT 
	Sname.Sname, Sname.Pages FROM Sname GROUP BY Sname.Sname, Sname.Pages HAVING COUNT (*) > 2)


Если сделать все бе алисов и самообъединений то все норм:
SELECT 
	Sname.Sname, Sname.Pages FROM Sname GROUP BY Sname.Sname, Sname.Pages HAVING COUNT (*) > 2
12 мар 14, 17:46    [15712366]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Выборка не имеет никакой связи с exists(), это два независимых запроса у Вас.
12 мар 14, 18:09    [15712530]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
timedo
Member

Откуда:
Сообщений: 31
Если я напишу вот так:

SELECT s.Sname, s1.Pages FROM Sname s, Sname s1 WHERE s1.Pages IN (SELECT 
	Sname.Pages FROM Sname GROUP BY Sname.Sname, Sname.Pages HAVING COUNT (*) > 2)


То оно все равно как то работает по кривому
12 мар 14, 18:14    [15712558]     Ответить | Цитировать Сообщить модератору
 Re: Запросы join  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Нет связи между s и s1, просто перебор всех комбинаций строк с отбрасыванием тех строк, которые не соответствуют WHERE.
12 мар 14, 18:21    [15712599]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить