Страница: 1 | 2 |
Вопрос: обновление поля
Добавлено: 08.07.07 19:28
Автор вопроса: Илья
Доброго!
есть трудность
запрос на обновление поля в таблице при условии измененности поля другой таблицы:
UPDATE Таблица2 SET Число1=1
WHERE Таблица1.Слово is not null
не срабатывает. Помогите разобраться пожалуйста
Ответы
Всего ответов: 26
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 08.07.07 21:44
UPDATE Таблица1, Таблица2 SET Таблица2.Число1=1
WHERE Таблица1.Слово is not null
Номер ответа: 2
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #2
Добавлено: 08.07.07 22:28
Большое спасибо, попроббовал, запрос выплдняется, но обновления не происходит. Может дело в том, что поле в Таблице1 - текстовое, во Таблице2 - числовое, т.е. смысл в том, что вводится слово в поле Таблицы1, запускается запрос и в поле Таблицы2 воодится "1"
Номер ответа: 3
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #3
Добавлено: 08.07.07 22:38
Была проблема синтаксиса, ее-то решить можно, а что конкретно должен сделать этот запрос с неизвестными мне типами данных, их свойствами, и состоянием данных в базе остается только догадываться. Конкретизируй.
Номер ответа: 4
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #4
Добавлено: 09.07.07 09:11
Конкретизирую:
две таблицы
Таблица1 - в поле Слово заносятся слова
Таблица2 - в поле Число заносятся цифры "1" или "0". Соответственно поле Слово - текстовое, поле Число - числовое.
Цель запроса - после введения нескольких слов в Таблица1.Слово обновить Таблица2.Число. При этом количество "1" в Таблица2.Число должно быть равно кол-ву слов в Таблица1.Слово
Сразу скажу, что этот запрос я пробовал и на связаных (один ко многим) таблицам, и на не связанных - один результат. Запрос выполняется, обновление не происходит.
Номер ответа: 5
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #5
Добавлено: 09.07.07 09:26
Еще раз попробовал запрос
UPDATE Таблица1, Таблица2 SET Таблица2.Число1=1
WHERE Таблица1.Слово is not null
Выяснил следующее:
если в таблице2 в поле Число стоит "0", то запрос не выполняется, если не стоит - выполняется. Но при этом проставляется только одна "1", не зависимо от того, сколько слов введено в Таблица1.Слово. Хотя при исполнении запроса пишется , что будут обновлено именно то количество записей, сколько было введено слов в Таблица1.Слово
Номер ответа: 6
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #6
Добавлено: 09.07.07 18:18
сделал тот же запрос в конструкторе
вот что получилось
UPDATE Таблица1 INNER JOIN Таблица2 ON Таблица1.КодСлова=Таблица2.КодСлова SET Таблица2.Число1 = 1
WHERE (((Таблица1.Слово1) Is Not Null));
та же ерунда - запрос выполняется - поле Число1 не обновляется
Номер ответа: 7
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #7
Добавлено: 09.07.07 20:33
UPDATE Таблица1, Таблица2 SET Таблица2.Число1=1
WHERE (Таблица1.Слово is not null) AND (Таблица1.КодСлова=Таблица2.КодСлова);
Логика этого запроса на изменение подразумевает что:
1. В [Таблица2] есть поле [КодСлова] и ВСЕ строки этого поля содержат данные.
2. В [Таблица1] есть поле [КодСлова] связанное с [Таблица2].[КодСлова] и [Таблица1].[Слово]заполнено частично.
3. Автор не расчитывает на то, что будет выполнен запрос на добавление. Таблица2 содержит все данные в КодСлова.
Попробуй сначала SELECT чтобы увидеть какие данные будут обновлены.
SELECT * FROM Таблица1, Таблица2
WHERE (Таблица1.Слово is not null) AND (Таблица1.Слово = Таблица2.Слово);
P.S.
У тебя Таблица2 случайно не пуста?
Номер ответа: 8
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #8
Добавлено: 09.07.07 21:24
таблица2 пустая естественно.
Смысл в том, что пользователь должен вводить в Таблицу1 слова, потом запускать запрос на обновление и в аналогичных полях (изначально пустых) Таблица2 должны проставляться "1" столько, сколько будет слов в Таблица1.
Можно было бы просто посчитать количество записей в Таблица1, но потом могут возникнуть проблемы с сохранением результатов.
Номер ответа: 9
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #9
Добавлено: 09.07.07 21:48
Я почему-то так и подумал.
Тогда ты выбрал не тот тип запроса.
Нужно INSERT INTO.
Номер ответа: 10
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #10
Добавлено: 09.07.07 21:58
INSERT INTO Таблица2 (Слово, Число1)
SELECT Таблица1.Слово, 1
FROM Таблица1 WHERE Таблица1.Слово Is Not Null;
Номер ответа: 11
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #11
Добавлено: 09.07.07 22:51
Спасибо, наверное правильное будет так:
INSERT INTO Таблица2 (Число1)
SELECT Таблица1.Слово1
FROM Таблица1 WHERE Таблица1.Слово1 Is Not Null;
однако в этом случае выдается транспорант:
"Нарушение уникальности ключа"
Номер ответа: 12
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #12
Добавлено: 09.07.07 23:05
Ээээ...
Бородатый анекдот:
- Можно-ли натянуть кондом на глобус?
- А что такое глобус?
- Вот с этого мы и начнем урок географии.
...
Для какой надобности в таблице2 есть индексированные поля? Для чего вообще таблица2?
Какие в ней еще есть поля?
Почему
Номер ответа: 13
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #13
Добавлено: 09.07.07 23:09
INSERT INTO Таблица2 (Число1) SELECT 1
Номер ответа: 14
Автор ответа:
Илья
Вопросов: 5
Ответов: 31
Профиль | | #14
Добавлено: 09.07.07 23:40
Хороший анекдот!
написал так
INSERT INTO Таблица2 ( Число1 )
SELECT Таблица1.Слово1
FROM Таблица1
WHERE Таблица1.Слово1 Is Not Null
все исправилось, однако естественно выбирает записи из Таблица1.Слово1 и копирует в Таблица2.Число1
а надо заменить слова на "1"
Чето туплю, куда здесь values (1) вставить?
может всеж таки дело в ограничениях, насколько помню есть ограничения в преобразовании между текстовым и числовым полем, ага вот нашел: "Текст может включать только числа и допустимые разделители целой и дробной части для числовых значений и денежных единиц. Число знаков в поле с типом данных «Текстовый» не должно превышать соответствующий размер поля, заданный для типа данных «Числовой»"? Да проблемы будут с пользователем, ему надо чтобы все наглядно было...
Номер ответа: 15
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #15
Добавлено: 09.07.07 23:53
Подожди, я уже ни чего не понимаю.
Итак:
1. Таблица2 пуста и в ней только одно поле [Число1].
Тогда:
INSERT INTO Таблица2 (Число)
SELECT 1 FROM Таблица1
WHERE Таблица1.Слово Is Not Null
2. Таблица2 пуста и в ней несколько полей названных также как в таблице1.
Тогда:
INSERT INTO Таблица2 (Число,Слово,КодСлова)
SELECT 1,Слово,КодСлова FROM Таблица1
WHERE Таблица1.Слово Is Not Null