Как выбрать строки из таблицы, в которой три или более значений в разных столбцах совпадают? - PullRequest
2 голосов
/ 27 февраля 2012

Здравствуйте, я работал над этим все утро.Я думал, что это было простое самостоятельное объединение, но само объединение на самом деле возвращает слишком много строк.

По сути, я пытаюсь найти строки в таблице, где определенные значения столбца соответствуют строке за строкой.

Так что, если строки три и три имеют одинаковые значения столбцов в трех определенных столбцах, возвращаются эти две строки.

До сих пор я пробовал самосоединение и полусоединение несколькими различными способами..

SELECT * 
FROM ATable a, ATable b
Where  a.colValue = b.colValue
and    a.colValue2 = b.colValue2

Возвращает слишком много строк.Является ли этот запрос даже объединением?Я не на том пути?Чего мне не хватает в самостоятельных объединениях, которые возвращают больше строк, чем сама таблица?

ATable содержит 20 строк, но запрос выше возвращает 36.

Как всегда, большое спасибо за любые ответы или подсказки.Я многому учусь, просто сформулировав вопрос.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Запрос в данный момент будет возвращать каждую строку, потому что все строки равны себе.Вам нужно ограничить его так, чтобы они были разными строками.

Я предполагаю, что у вас есть какой-то столбец идентификатора первичного ключа.

SELECT * 
FROM ATable a, ATable b
Where  a.colValue = b.colValue
and    a.colValue2 = b.colValue2
and    a.Id!= b.Id

Еще одна вещь, которую вы должны учитывать, это то, чтоесли бы у вас были строки:

ID      ColValue     ColValue2   ColValue3
1           A            B            C
2           A            B            D

Вы бы увидели:

a.id a.ColValue a.ColValue2 a.ColValue3 b.id b.ColValue b.ColValue2 b.ColValue3
1    A          B           C           2    A          B           D
2    A          B           D           1    A          B           C

Потому что строка 1 такая же, как строка 2. Но и строка 2 такая же, как строка 1.

1 голос
/ 27 февраля 2012

вы все делаете правильно ... для каждой строки вы получите себя и все остальные строки, соответствующие указанным вами столбцам, которые должны составлять МИНИМУМ от общего числа строк в таблице и, возможно, больше.

0 голосов
/ 27 февраля 2012

Вы пытаетесь найти повторяющиеся строки?

SELECT count(a.id) as cnt
FROM ATable a
GROUP BY a.colValue
WHERE cnt>1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...