![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с SQL запросом поиска совпадений
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] видишь подзапрос?