Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Есть таблица со всеми адресами надо из неё выбрать определеные адреса которые находяться в друго таблице и результат записать в третью таблицу.
Вот такой вот запрос!!! строки в таблице STREET_KIR_RAIN_SEL и re_objects не повторяються. Но когда происходит вставка втаблицу в ней появляються повторяющиеся строки. Уже голову сломал что не так???Откуда беруться эти строки???

DECLARE
CURSOR kir_odbject
IS
SELECT street
FROM STREET_KIR_RAIN_SEL
order by street asc;

obj1 STREET_KIR_RAIN_SEL.street%TYPE;
obj2 STREET_KIR_RAIN_SEL.street%TYPE;
obj3 STREET_KIR_RAIN_SEL.street%TYPE;
BEGIN
For obj in kir_odbject loop
obj1 := obj.street || '%кв.%';
obj2 := obj.street || '%к.%';
obj3 := obj.street || '%пом.%';

INSERT INTO prog.OBJECTS_KIR
SELECT re.ID, re.NAME, re.adr_desc, re.total_sq, SYSDATE
FROM reg_rt.re_objects re
WHERE re.adr_desc IN (
SELECT rer.adr_desc
FROM reg_rt.re_objects rer
WHERE rer.adr_desc LIKE obj1
OR rer.adr_desc LIKE obj2
OR rer.adr_desc LIKE obj3);
END LOOP;
END;
24 авг 06, 08:27    [3046450]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
m_kus
Member

Откуда: Екатеринбург
Сообщений: 306
А STREET_KIR_RAIN_SEL.Street не содержит пустых значений? В таком случае неизбежны повторы. Кроме того если один street будет прерфиксом другого (например "Августа" и "Августа Бебеля"), произойдёт то же самое...
Вообще это можно ведь и одним sql-оператором сделать:

INSERT INTO prog.OBJECTS_KIR
SELECT re.ID, re.NAME, re.adr_desc, re.total_sq, SYSDATE
FROM reg_rt.re_objects re, STREET_KIR_RAIN_SEL skrs
WHERE re.adr_desc LIKE skrs.street || '%кв.%'
OR re.adr_desc LIKE skrs.street || '%к.%'
OR re.adr_desc LIKE skrs.street || '%пом.%');

если, конечно, я правильно понял...
24 авг 06, 08:53    [3046501]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
да вроде ты правильно понял! нет пустых строк там нет!!! Сейчас пробую как предложил ты!! Спасибо! Может поможет!
24 авг 06, 09:01    [3046520]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
m_kus
Member

Откуда: Екатеринбург
Сообщений: 306
Чё-то наверное я неправильно написал. Всё равно это гарантирует уникальность.
Самое простое написать так:
INSERT INTO prog.OBJECTS_KIR
SELECT DISTINCT re.ID, re.NAME, re.adr_desc, re.total_sq, SYSDATE
FROM reg_rt.re_objects re, STREET_KIR_RAIN_SEL skrs
WHERE re.adr_desc LIKE skrs.street || '%кв.%'
OR re.adr_desc LIKE skrs.street || '%к.%'
OR re.adr_desc LIKE skrs.street || '%пом.%');
А уж если производительность будет не устравить, это другой вопрос...
24 авг 06, 09:08    [3046539]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
m_kus
Member

Откуда: Екатеринбург
Сообщений: 306
m_kus
Чё-то наверное я неправильно написал. Всё равно это гарантирует уникальность.

Читать: "не гарантирует уникальноость"
24 авг 06, 09:09    [3046543]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Результат тот же! немогу понять в чем причина не в одной из таблиц откуда производиться выборка повторений нет!!! а вот в результирущей есть!! я подумал и пришол к выводу что просто перекопирую новую таблицу с удаление повторяющихся строк!!! Или просто буду делатть выборку с помощью DISTINCT.
Спасибо за помощь!
Конечно всетаки охота знать почему появляються повоторныен строки!! причем как я понял повторение строк начинаеться с определенного места!
24 авг 06, 09:20    [3046576]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
m_kus
Member

Откуда: Екатеринбург
Сообщений: 306
Ну это же очевидно: по заданным условиям для каких-то строк reg_rt.re_objects имеется несколько соответствий в STREET_KIR_RAIN_SEL. Надо найти, какие именно строки повторяются, в ручную поискать соответствия в STREET_KIR_RAIN_SEL и будет видно, что делать.
24 авг 06, 09:28    [3046597]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
mikola1982
Результат тот же! немогу понять в чем причина не в одной из таблиц откуда производиться выборка повторений нет!!!
Приведи пример адреса, который повторяется.
Может тогда что-то прояснится.
24 авг 06, 09:32    [3046615]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
mikola1982
Результат тот же! немогу понять в чем причина не в одной из таблиц откуда производиться выборка повторений нет!!! а вот в результирущей есть!!
По этому пункту есть еще вопросы:
1) Как проверялось, что нет совпадений?
Что выдает запрос:
SELECT re.adr_desc, count(*), min(re.ID), max(re.ID)
FROM reg_rt.re_objects re
GROUP BY re.adr_desc
HAVING count(*) > 1

2) У повторяющихся адресов - ID одинаковый или разный?
Какие адреса лежат под этими ID в исходной таблице?
24 авг 06, 09:50    [3046675]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Вот етот адрес повторялся Артема,ул. 15, кв. 10

Брал SELECT re.ID, re.NAME, re.adr_desc, re.total_sq, SYSDATE
FROM reg_rt.re_objects re, street_kir_rain_sel skrs
WHERE re.adr_desc LIKE '%Артема%ул%15' || '%кв.%'
OR re.adr_desc LIKE '%Артема%ул%15' || '%к.%'
OR re.adr_desc LIKE '%Артема%ул%15' || '%пом.%';

получал все квартиры этого дома!! и при этом запросе совпадений нет!!!
Причем в результирующей таблице у повторяющихся записей совподает все если бы записи повторялись то ID были бы разные так как ето ключевое уникальное поле.
Втом то и дело что он часть адресов берет нормально а часть дублируует в конечной таблице!
24 авг 06, 10:24    [3046817]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
Да сделал запрос приведеный выше! У всех повторяющихся разный ID, а значит это два разных объетка. Но адреса которые дублируються в таблице этот запрос не показал, тоесть они не повторяються!
24 авг 06, 10:29    [3046853]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
mikola1982
Вот етот адрес повторялся Артема,ул. 15, кв. 10
Так проверьте этот адрес. Посмотрите, сколько раз вы входите для него в цикл, сколько записей вставляет insert (sql%rowcount).
24 авг 06, 10:39    [3046901]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
если брать только эту запись то вставляет как надо! без дублирования строк!!
24 авг 06, 10:49    [3046954]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Ну так запускайте не по одной, просто перед end loop добавьте, например:

if obj.street = 'Артема' then
  dbms_output.put_line(sql%rowcount);
end if;
а то так гадать можно долго ;)
24 авг 06, 10:57    [3047011]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
mikola1982
Вот етот адрес повторялся Артема,ул. 15, кв. 10

Брал SELECT re.ID, re.NAME, re.adr_desc, re.total_sq, SYSDATE
FROM reg_rt.re_objects re, street_kir_rain_sel skrs
WHERE re.adr_desc LIKE '%Артема%ул%15' || '%кв.%'
OR re.adr_desc LIKE '%Артема%ул%15' || '%к.%'
OR re.adr_desc LIKE '%Артема%ул%15' || '%пом.%';

получал все квартиры этого дома!! и при этом запросе совпадений нет!!!

Тогда ищем повторения улиц во второй таблице.

что выдает этот запрос?
SELECT skrs.street, count(*), min(skrs.ID), max(skrs.ID)
FROM street_kir_rain_sel skrs
GROUP BY skrs.street
HAVING count(*) > 1

И еще - как работает запрос с условием LIKE - с учетом регистра или нет?
SELECT re.ID, re.NAME, re.adr_desc, re.total_sq       FROM reg_rt.re_objects re
WHERE re.adr_desc LIKE '%Артема%'

SELECT re.ID, re.NAME, re.adr_desc, re.total_sq       FROM reg_rt.re_objects re
WHERE re.adr_desc LIKE '%артема%'
24 авг 06, 11:08    [3047082]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
нет во воторой таблице повторения!!!
Да с учетом регистра тоесть Артема и артема - два разных названия!
У нас на серваке отключена служба Oracle Text.
24 авг 06, 11:12    [3047103]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Попробуйте посмотреть что выдает запрос с выводом всех полей из двух таблиц - может это на что-нибудь натолкнет...

SELECT re.*, skrs.*
FROM reg_rt.re_objects re, STREET_KIR_RAIN_SEL skrs
WHERE re.adr_desc LIKE skrs.street || '%кв.%'
OR re.adr_desc LIKE skrs.street || '%к.%'
OR re.adr_desc LIKE skrs.street || '%пом.%');

mikola1982
нет во воторой таблице повторения!!!
Казнить нельзя помиловать...

Смысл сказаного так окончательно и не понят.
то ли: нет повторенИЙ, то ли: нет<,> в таблице повторения :)
24 авг 06, 12:54    [3047824]     Ответить | Цитировать Сообщить модератору
 Re: Почему повторяються строки в новой таблице!!!!????  [new]
mikola1982
Member

Откуда:
Сообщений: 587
нет повторений!!!
прошу прощения просто вечно спешу!!!
Нашел причину!!!!
Вот блин брана!!!!!!
Спасибо всем!!
причина в том что адрес '%Артема%15' подходит под '%Артема%5'!!!
Блин целый день потратил на такую фигню!!!!! Прмя стыдно!!!
Но ето опыт который приобретаеться с годами! ;)
Еще раз спасибо всем!!!
24 авг 06, 13:42    [3048191]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить