Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Проблема с заполнением T-SQL


Автор: Erick 30.5.2005, 20:55
Цитата

Заполните таблицу STUDENTS_1 данными только для отличников из таблицы STUDENTS (признаком является наличие только отличных оценок в таблице USP).

Пишу запрос:
Код

INSERT INTO STUDENTS_1
SELECT *
FROM STUDENTS
WHERE USP.SNUM=STUDENTS.SNUM
AND USP.OCENKA=5;

В сообщениях:
Цитата

Server: Msg 107, Level 16, State 3, Line 1
The column prefix 'USP' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Line 1
The column prefix 'USP' does not match with a table name or alias name used in the query.

Почему smile

Автор: HalkaR 30.5.2005, 21:58
А что за таблица USP участвует в запросе?
Код

INSERT INTO STUDENTS_1
SELECT *
FROM STUDENTS, USP
WHERE USP.SNUM=STUDENTS.SNUM
AND USP.OCENKA=5;
Возможно надо внести такое исправление.

Автор: Erick 30.5.2005, 22:07
Column name Datatype Length Precision Scale
UNUM Int 4 10 0
OCENKA Tinyint 1 3 0
UDATE Smalldatatime 4 0 0
SNUM Int 4 10 0
PNUM Smallint 2 5 0

Эта таблица ссвязана по полю SNUM с STUDENTS.
Цитата

FROM STUDENTS, USP


Данные должны браться только со STUDENTS.

Автор: simanyay 30.5.2005, 22:13
Код

INSERT INTO STUDENTS_1
SELECT STUDENTS.*  /* Если это возможно */
FROM STUDENTS, USP
WHERE USP.SNUM=STUDENTS.SNUM
AND USP.OCENKA=5;



Автор: Erick 30.5.2005, 22:21
simanyay Получилось, спасибо.

Автор: simanyay 30.5.2005, 22:29
Цитата(Erick @ 31.5.2005, 00:21)
simanyay Получилось, спасибо.


anytime

Автор: Erick 30.5.2005, 22:52
Еще вопросик:
Продолжение
Цитата

Заполните таблицу USP_1 остальными данными из таблицы USP

Пишу:
Код

INSERT INTO USP_1
SELECT *
FROM USP
WHERE USP.OCENKA<5;

Messages:
Цитата

Server: Msg 547, Level 16, State 1, Line 1
INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_PNUM'. The conflict occurred in database 'EDUCATION', table 'PREDMET_1', column 'PNUM'.
The statement has been terminated.

smile

Автор: simanyay 30.5.2005, 23:00
Посмотри в таблицу PREDMET_1. У тебя констраинты между таблицами конфликтуют
Добавлено @ 23:01
А лучше давай сюда результаты:
Код

DESC PREDMET_1;
DESC USP;

Автор: HalkaR 30.5.2005, 23:01
Такого значения PNUM в таблице Education нет, а должно быть т.к. это внешний ключ.
Добавлено @ 23:03
Код

INSERT INTO USP_1
SELECT *
FROM USP
WHERE USP.OCENKA<5 AND PNUM IN (SELECT DISTINCT PNUM FROM EDUCATION)

так ты вставишь те записи PNUM которых есть в EDUCATION

Автор: Erick 30.5.2005, 23:18
В PREDMET_1 PNUM первичный ключ, а в USP он должен быть внешним ключом, но в констраинте почему-то внешний ключ записан как FK_USP_PREDMET. Наверное потомучто я связи делал в диаграмме. Может в этом проблема? Но в USP_1 внешний ключ PNUM.

Автор: Erick 31.5.2005, 00:13
Да, скорее всего всё дело в разных названиях ключей. Просто таблицы: STUDENTS, PREDMET, TEACHERS, USP создавались вручную. Первичные ключи у них тоже создавались вручную. Связи и соответсвенно внешние ключи, тоже создавались вручную в диаграммах. Таблицы:STUDENTS_1, PREDMET_1, TEACHERS_1, USP_1 имеют такие же поля и типы, что и перечисленные ранее таблицы, но они создавались вместе с первичными и внешними ключами в Query Analyzer. И названия некоторых ключей у них другие. Так что, надо менять название ключей или можно как-то "пошаманить" в самом запросе? Если надо менять названия ключей, то как это сделать? Через запрос я знаю, а как вручную?

Автор: simanyay 31.5.2005, 18:04
Выведи результы тех запросов, которые я просил. Пожалуйста.

Автор: Erick 31.5.2005, 20:47
simanyay А где это писать? Пишу в Query Anayzer, но выдаёт ошибку:
Цитата

Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'DESC'.



Автор: simanyay 31.5.2005, 20:53
Гымс, а в MS SQL нет DESC ... что-ли? Попробуй DESCRIBE

Автор: Erick 31.5.2005, 20:59
Тоже самое, но DESCRIBE даже не подсвечивается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)