Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение в цикле... / 8 сообщений из 8, страница 1 из 1
20.04.2009, 01:24
    #35941209
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
Добрый день.
Научите плиз, как имея две таблицы Table1 и Table2 с данными,
получить Table3 c их непересекающимися по полю f2 данными.
т.е. например, Table1 имеет два поля f1 и f2.
f1 I f2
--------------
text1 I 123
text2 I 124
text3 I 125
text4 I 125
text5 I 126
text6 I 127
text7 I 128

Table2 имеет одно поле f2.
f2
-------------
123
125
126
127
128
128
129
130

Хочу получить Table3 с двумя полями f1 и f2, чтобы она выглядела так :
f1 I f2
--------------
text2 I 124
text4 I 125
I 128
I 129
I 130

Опыта не имею, спасибо.
...
Рейтинг: 0 / 0
20.04.2009, 18:41
    #35942735
slope
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
можно так, если нормальная база
create table3 as
select * from table1 where f2 in (
select f2 from table1
minus
select f2 from table2)
union
select * from table2 where f2 in (
select f2 from table2
minus
select f2 from table1)
только вот что то у вас повторяющиеся данные в table3 если я правильно понял суть задачи.
...
Рейтинг: 0 / 0
20.04.2009, 21:51
    #35943018
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
В access 2007 вариант с "Minus" в проге что-то не пляшет...
Слышал, что в Oracle... не берусь... не спец.

Действительно, в примере поле f2 таблицы table1 и table2 содержит разные
и повторяющиеся строки... В этом и сложность...
В общем, пример с нужной table3 - и отражает потребность.
Т.е. если в первой два раза встречается 125, а во второй один,
то в третью результирующую table3 должна попасть "не перекрытая"
одна запись 125, и если во второй есть два раза 128 и по одному 129
и 130 то в table3 попадет один не перекр. 128 и соответстенно 129 и 130...

Через select и union не получается...
Перебор циклом тоже опыта нет...
буду оччень благодарен за решение примера,
спасибо.
...
Рейтинг: 0 / 0
20.04.2009, 22:21
    #35943042
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
Alex_WongВ access 2007 вариант с "Minus" в проге что-то не пляшет...
Слышал, что в Oracle... не берусь... не спец.Вопросы по Акцессу надо задавать на Акцессовском форуме.
С точки зрения стандартного sql должно сработать такое:
Код: plaintext
1.
2.
select f1, f2 from table1 where f2 not in (select distinct f2 from table2)
union
select null, f2 from table2 where f2 not in (select distinct f2 from table1)
...
Рейтинг: 0 / 0
20.04.2009, 22:39
    #35943060
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
по такой схеме получил table3 :

f1 f2
-------------
text2 124
129
130

Здесь не попали 125 и 128...
должно быть :

f1 f2
-------------
text2 124
text4 125
<нет> 128
<нет> 129
<нет> 130

спасибо.
...
Рейтинг: 0 / 0
20.04.2009, 23:03
    #35943079
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
Alex_Wongдолжно быть :

f1 f2
-------------
text2 124
text4 125
<нет> 128
<нет> 129
<нет> 130Почему это вдруг "должно быть"? Вовсе не должно. В table2 есть поле f2 со значение 125, значит строки text4, 125 в итоге быть не должно. В первой таблице есть строка text7, 128, значит и в итоге строки с 128 быть не должно.
Смотри на свои данные внимательнее.
...
Рейтинг: 0 / 0
21.04.2009, 00:22
    #35943124
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
White Owl, спасибо за ваше участие...

выше я пояснил почему, т.к. например в table1 есть строка text3 I 125
и есть строка text4 I 125 т.е. 125 в ней встречается два раза,
а в table2 125 присутствует один раз...

и должно произойти взаимоудаление равного кол-ва строк,
причем мне без разницы какая из двух :
с text3 или с text4 попадет в table3.

Вот например, если бы в table2 не было f2=125,
то в table3 должны попасть обе строки:
..... I .....
text3 I 125
text4 I 125
..... I .....

Данный пример, имеет конкретное значение
для работы с моими данными, и максимум к чему я пришел -
это ввести дополнительное поле для table1 и table2 с подсчетом кол-ва строк:
Так для table1 будет
f2______ count
123_____1
124_____1
125_____2
126_____1
127_____1
128_____1

Для table2 будет
f2______count
123_____1
125_____1
126_____1
127_____1
128_____2
129_____1
130_____1

Ну а нужная результирующая table3 должна получится как разность 'каунтов'
если равна нулю то строка не попадает в table3, иначе попадает...
но до рабочего кода навыков не хватает.
Пробовал перебор в цикле... также...
...
Рейтинг: 0 / 0
21.04.2009, 08:50
    #35943330
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение в цикле...
для MS SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
  max(t1.f1) f1,
  isnull(t2.f2, t1.f2) f2
from
  #t2 t2
full join #t1 t1 on t1.f2 = t2.f2
group by
  isnull(t2.f2, t1.f2)
having
  count(t1.f2) + count(t2.f2)  <>  2 
I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение в цикле... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]