Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 20:17   #1
pipet
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию sql

здравствуйте у меня такая проблема: я пишу запрос:
SELECT pers_name AS "ФИО", address AS "Адрес", phone AS "Телефон", name_prof AS "Должность", dep_id AS "Отделение"
FROM personal p,
personal p1,
personal p2, prof, departments
WHERE p.pers_id = prof.prof_id
AND p1.dept = departments.dep_id
на что вылазит ошибка: Column 'pers_name' in field list is ambiguous что мне делать?
pipet вне форума Ответить с цитированием
Старый 12.12.2010, 21:19   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

скажите, пожалуйста, для чего вы три раза обращаетесь к таблице "Персонал"?
FROM personal p,
personal p1,
personal p2

Он говорит вам, что в блоке FROM есть несколько таблиц с одинаковым названием поля, а именно pers_name, и он не знает, из какой именно таблицы вам нужен этот pers_name.

Запрос ваш построен некорректно. Вот как-то так:
Код:
SELECT pers_name AS "ФИО", address AS "Адрес", phone AS "Телефон", name_prof AS "Должность", dep_id AS "Отделение" 
FROM personal p, prof, departments 
WHERE p.pers_id = prof.prof_id AND p.dept = departments.dep_id
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 12.12.2010, 21:23   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ACE Valery, согласен... но чтобы предлагать вариант решения, нужно знать исходное задание...
иногда нужно бывает и несколько раз одну и ту же таблицу задействовать в поле FROM...
правда, нужно ли это здесь - не уверен.. Как и не уверен, что TC понимает, что он собственно написал...


pipet

1) Вы должны в select'е указать, откуда брать pers_name
(поле с такими именем есть не одной, а в нескольких из указанных во FROM таблиц
а конкретно, очевидно, это поле есть в таблице p, p1 и p2 - из какой брать нужно указать
например, select p.pers_name AS "ФИО", ....)

2) запрос имеет ещё как минимум одну КРИТИЧЕСКУЮ ошибку.
Запомните на всегда - что ВСЕ указанные таблицы должны быть связаны с друг другом!
таблица p2 с кем связана?!
и между корежами данных p+prof и p1+departments тоже должна быть связь..
Обычно, если указано во FROM 5-ть таблиц, должно быть задано 4-ре условия связи таблиц....




p.s. А может Вам стоит почитать книжки по SQL?.. Того же Мартина Грубера "Понимание SQL"...

Последний раз редактировалось Serge_Bliznykov; 12.12.2010 в 21:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2010, 21:48   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
иногда нужно бывает и несколько раз одну и ту же таблицу задействовать в поле FROM...
Знаю, сталкивалась с таким, причем не раз. Но почему-то думаю, что данное задание - просто выбрать всех сотрудников.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 13.12.2010, 00:37   #5
pipet
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

у меня в таблице personal есть несколько полей и 3 из них мне надо вывести - pers_name, address и phone. и я так понимаю sql не поймет что мне надо вывести 3 из одной таблицы и по одному столбцу из других таблиц, поэтому использовал personal 3 раза
pipet вне форума Ответить с цитированием
Старый 13.12.2010, 00:42   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от pipet Посмотреть сообщение
у меня в таблице personal есть несколько полей и 3 из них мне надо вывести - pers_name, address и phone. и я так понимаю sql не поймет что мне надо вывести 3 из одной таблицы и по одному столбцу из других таблиц, поэтому использовал personal 3 раза
А ты сделай вот так и тогда он должен все понять :

Код:

SELECT p.pers_name AS "ФИО", p.address AS "Адрес", p.phone AS "Телефон", pr.name_prof AS "Должность", d.dep_id AS "Отделение" 
FROM personal p, prof pr, departments d
WHERE p.pers_id = pr.prof_id AND p.dept = d.dep_id
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 13.12.2010, 00:46   #7
pipet
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
pipet
а конкретно, очевидно, это поле есть в таблице p, p1 и p2 - из какой брать нужно указать
p, p1 и p2 это псевдонимы таблиц
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Обычно, если указано во FROM 5-ть таблиц, должно быть задано 4-ре условия связи таблиц....
Таблицы 3! personal, prof и departments.
Нужно из таблицы personal вывести столбцы pers_name, address и phone, из таблицы prof вывести столб name_prof, из таблицы departments вывести dep_name.
Если на каждый столб из одной таблицы указывать имя таблици то он начинает ругатся на неверные алиасы, если я добавляю алиасы то он начинает ругатся на отсутствие столбца.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. А может Вам стоит почитать книжки по SQL?.. Того же Мартина Грубера "Понимание SQL"...
Оттуда и беру все это.

Цитата:
Сообщение от andrewpalkin Посмотреть сообщение
А ты сделай вот так и тогда он должен все понять :

Код:

SELECT p.pers_name AS "ФИО", p.address AS "Адрес", p.phone AS "Телефон", pr.name_prof AS "Должность", d.dep_id AS "Отделение" 
FROM personal p, prof pr, departments d
WHERE p.pers_id = pr.prof_id AND p.dept = d.dep_id
Спасибо огромное =)

а еще если не секрет вот у мне код делфи:
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.SimpleDataSet1.Active:=false;
Form1.SQLQuery1.SQL.Text:='SELECT p.pers_name AS "ФИО", p.address AS "Адрес", p.phone AS "Телефон",
 pr.name_prof AS "Должность", d.dep_id AS "Отделение" FROM personal p, prof pr, departments d 
WHERE p.pers_id = pr.prof_id AND p.dept = d.dep_id "+Edit1.text+"';
Form1.SimpleDataSet1.Active:=true;
end;
end.
должен искать совпадения с введеннными данными в edit1 но он ругается на синтаксис
как быть?

Последний раз редактировалось Stilet; 13.12.2010 в 10:12.
pipet вне форума Ответить с цитированием
Старый 13.12.2010, 01:08   #8
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от pipet Посмотреть сообщение
а еще если не секрет вот у мне код делфи:
...
должен искать совпадения с введеннными данными в edit1 но он ругается на синтаксис
как быть?
Вот тут помочь не могу , с делфи не знаком ... Извини , с SQL знаком , но не с делфи
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 13.12.2010, 01:18   #9
pipet
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

вот следующая беда:
надо чтобы поле сравнивалось с текстом и выводились поля содержащие этот текст
вот код:
Код:
SELECT p.pers_name AS "ФИО", p.address AS "Адрес", p.phone AS "Телефон", pr.name_prof AS "Должность", d.dep_id AS "Отделение"
FROM personal p, prof pr, departments d
WHERE p.pers_id = pr.prof_id
AND p.dept = d.dep_id AND p.pers_name="Коперник"
но он не вы дает результатов

Последний раз редактировалось pipet; 13.12.2010 в 01:54.
pipet вне форума Ответить с цитированием
Старый 13.12.2010, 08:55   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
AND p.pers_name="Коперник"
1) уверены, что именно в двойных кавычках надо писать, а не в одинарных?
какая у Вас СУБД ?

2) если с кавычками порядок, значит, у Вас в базе нет записей,
где pers_name равно значению "Коперник" ! Почему, Вы такую запись видете, а она не выбирается - это отдельных разговор, тут может быть много вариантов: например, там в начале или конце строки есть пробелы (некоторые СУБД к этому относятся очень щепетильно), либо в таблице написано КОПЕРНИК, либо какая-то из букв имени - латинская (K, o, p, k ) ?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
sql или не sql Diamand SQL, базы данных 9 18.09.2008 17:17
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15