Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с SQL запросом поиска совпадений


Страницы:   1 2

Kostafey ©   (2008-09-29 15:39:00) 

Имеется таблица вида:
Table1
id Nomer
1  001
2  002
3  002
4  001

Нужно узнать совпадающие номера

select distinct *
 v.id, v.nomer,
 v1.id, v1.nomer
from
 Table1 v,
 Table1 v1
where
 and v.nomer = v1.nomer        
 and v.id != v1.id


Получим:
v.id v.Nomer   v1.id v1,nomer
1    001         4    001
2    002         3    002
3    002         2    002
4    001         1    001

Но в этом случае совпедения дублируются
А как получить результат вида:

v.id v.Nomer   v1.id v1,nomer
1    001         4    001
2    002         3    002


stas   (2008-10-01 08:54:00) [1]

Kostafey ©   (30.09.08 22:30) [32]
Тогда непонятна цель твоего запроса.


Kostafey   (2008-09-30 22:30:00) [2]

> [28] stas ©   (30.09.08 16:11)
> Kostafey ©   (29.09.08 22:21) [17]
> тебе нужна сводная таблица. В строках ID  в столбцах NOMER,
> на пересечении единичка.

Не вижу в этом смысла. Зачем?


> [30] Ega23 ©   (30.09.08 16:55)

+1


Правильный$Вася   (2008-09-30 17:01:00) [3]


>  Но геморно...

т.е. это первманентный процесс, который никогда не будет доведен до конца, т.е. совершенная форма глагола к нему не может быть применена
только герундий....


Ega23   (2008-09-30 16:55:00) [4]


> бардак-в-законе тоже не автоматизируется


Ещё как. Но геморно...


Правильный$Вася   (2008-09-30 16:21:00) [5]


> Ega23 ©   (30.09.08 12:59) [27]

бардак-в-законе тоже не автоматизируется
если ты что-то подобное видел или слышал, то это был эмулятор


stas   (2008-09-30 16:11:00) [6]

Kostafey ©   (29.09.08 22:21) [17]
тебе нужна сводная таблица. В строках ID  в столбцах NOMER, на пересечении единичка.


Ega23   (2008-09-30 12:59:00) [7]


> А на предлажение - ты мол подумай, сразу отрезать с формулировкой
> "Бардак не автоматизируется"


Так-то оно так. До тех пор, пока "Бардак" не узаконивается...  :(


Anatoly Podgoretsky   (2008-09-30 12:05:00) [8]

> sniknik  (30.09.2008 0:30:23)  [23]

А на предлажение - ты мол подумай, сразу отрезать с формулировкой "Бардак не автоматизируется"


Anatoly Podgoretsky   (2008-09-30 12:03:00) [9]

> sniknik  (30.09.2008 0:30:23)  [23]

Я - сначала не курил 6 часов, на другой день не курил совсем и без перебарывания, нечего там перебарывать.


Германн   (2008-09-30 01:30:00) [10]


> sniknik ©   (30.09.08 00:30) [23]
>
> ни разу не видел человека бросившего курить поэтапно, типа
> сегодня на одну затяжку меньше чем вчера, а завтра меньше
> чем сегодня, и т.д. через полгода в планах удет ни одной.
> ..
> если и бросают, то сразу, с перебарыванием себя.

Мал жизненный опыт.
Ты не поверишь как много таких людей. Поверь только, что "все люди разные, но у них встречаются общие черты". :)


sniknik   (2008-09-30 00:30:00) [11]

> Ведь приведенный запрос - лишь схема.
для схемы я и привел решение.

> т.к. в принципе, таких совпадений должно становится
> все меньше, и в конечном итоге (лет через ...цать),
> вовсе остаться не должно.
ни разу не видел человека бросившего курить поэтапно, типа сегодня на одну затяжку меньше чем вчера, а завтра меньше чем сегодня, и т.д. через полгода в планах удет ни одной...
если и бросают, то сразу, с перебарыванием себя.
с бардаком думаю ситуация примерно та же...

> как бы это сказать... бумажного обеспечения :))))
вот в бумагах тогда пусть дубли и ведут, дописывают к твоему номеру тот который по их мнению верный хотя и дубль, а у тебя будет правильно.
в этом случае путаница в номерах будет не на тебе, а на их ответственности, и будет их головная боль...  и все быстро "саморазрешиться" уверяю тебя.
главное правильно донести идею до начальства, с четкой постановкой "или бардак навсегда, или надо чтото делать, я вот предлагаю... а программированием бардака. бардак не исправишь".


Kostafey   (2008-09-29 23:53:00) [12]

А кроме того, эти совпадения - баг не только
программного и информационного обеспечения, а...
как бы это сказать... бумажного обеспечения :))))

т.к. в принципе, таких совпадений должно становится
все меньше, и в конечном итоге (лет через ...цать),
вовсе остаться не должно.


Kostafey   (2008-09-29 23:48:00) [13]

> [20] sniknik ©   (29.09.08 23:11)

Хорошо, но не совсем понятен смысл всего этого.
Ведь приведенный запрос - лишь схема.
Реально, кроме id и номера сущесвуют другие поля.
Их-то в таком случае где хранить?

Если мы принимаем, что в основной табллице номер-
уникальное поле, то в случае совпадения номеров
даные этой записи отправляются во вспомогательную
таблицу - суть дублирующая структуру исходной таблицы +
содежащая поле количества совпадений....

...или я что-то неправильно понял?


sniknik   (2008-09-29 23:11:00) [14]

> Сущствует список разрешенных, "законных"
вынести "законные" совпадения в отдельную таблицу...
таблица "законных" совпадений будет состоять из номера, и порядка (в нем позиция в который раз оно совпадает)
пример
основная таблица
1
2
3
4
5
допустим 2 совпадает 2 раза, 4 три
тогда в таблице совпадений будет
2  1
2  2
4  1
4  2
4  3
(второе поле, можно просто автоинкремент)
объединять будеш также но не само с собой а разные таблицы.


Kostafey   (2008-09-29 22:57:00) [15]

> [18] sniknik ©   (29.09.08 22:37)
> > видеть не то что баг имеет место, а как его устранить,
>
> уникальный индекс на поле, и никаких проблем с дублированием...

Все не так просто. Сущствует список разрешенных, "законных"
совпадений. Он дописывается в запросе, навроде

select distinct *
v.id, v.nomer,
v1.id, v1.nomer
from
Table1 v,
Table1 v1
where
and v.nomer = v1.nomer        
and v.id > v1.id
and v.nomer not in (
.....
)


sniknik   (2008-09-29 22:37:00) [16]

> видеть не то что баг имеет место, а как его устранить,
уникальный индекс на поле, и никаких проблем с дублированием...


Kostafey   (2008-09-29 22:21:00) [17]

> [9] Dmitry S ©   (29.09.08 16:25)
>
> > Не понял?
>
> Понял... ты получишь
> id Nomer
> 1    001        
> 4    001
> 2    002        
> 3    002
>
> А автор хотел
> v.id v.Nomer   v1.id v1,nomer
> 1    001         4    001
> 2    002         3    002


Да, конечно, конечная цель - сравнить именно Id
(и прочие поля)


> [10] Ega23 ©   (29.09.08 16:27)
>
> > А автор хотел
>
> пипец. А если их три номера одинаковых??? А если пятнадцать?

Вот 3 бывает, но редко. Но будь даже 15, хорошо, нужно-то
видеть не то что баг имеет место, а как его устранить,
т.е. пресловутые ошибочные Id.
Значит надо показать все 15.
Может есть способ сделать это из [4] ?


> [15] Johnmen ©   (29.09.08 20:08)

Век живи-век учись. Возможно, мне
следовало более четко формулировать вопрос :)


Дмитрий_С   (2008-09-29 22:05:00) [18]


> самый правильный

Каждый прав лишь в том, что другой неправ.


> Ega23 ©   (29.09.08 19:53) [14]

Может быть, только он не решает поставленную автором задачу.


> На собеседованиях, бывает, спрашивают. Имей ввиду.

Нашел пионера :)


Johnmen   (2008-09-29 20:08:00) [19]

Ответ [4] самый правильный (если можно так сказать) на вопрос "Нужно узнать совпадающие номера".


Ega23   (2008-09-29 19:53:00) [20]


> Не рекомендуется употреблять подзапросы в списочном контексте,


Где ты в [4] видишь подзапрос?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо