У меня есть эта таблица, вот моя db Fiddle
CREATE TABLE table1 (
`ID` VARCHAR(100),
`Val` VARCHAR(100),
`Val2` VARCHAR(100),
`Val3` VARCHAR(100)
);
INSERT INTO table1
(`ID`, `Val`, `Val2`, `Val3`)
VALUES
('1','100','200','90'),
('2','100','200','10'),
('3','100','200','20'),
('4','20','100','55'),
('5','20','100','10'),
('6','112','100','20'),
('7','112','100','20'),
('8','90','200','90'),
('9','30','90','180'),
('10','30','90','29');
Я хочу получить результат с этим условием
- Val нужно было дублировать И
- Val2 должен быть дублирован И
После того, как я получил повторяющееся значение, теперь мне нужно проверить val3 из повторяющегося значения, если значение val3 имело уникальное значение из предыдущего агрегата
Я пробовал с этим запросом
SELECT
t1.*
FROM
table1 t1
WHERE
EXISTS (
SELECT
1
FROM
table1
WHERE
ID <> t1.ID
AND Val = t1.Val
AND Val2 = t1.Val2
)
AND NOT EXISTS (
SELECT
1
FROM
table1
WHERE
Val = t1.Val
AND Val2 = t1.Val2
AND Val3 IN (
SELECT Val3
FROM table1
GROUP BY Val3
HAVING count( * ) > 1
)
)
Я ожидаю, что результат будет таким
ID Val Val2 Val3
1 100 200 90
2 100 200 10
3 100 200 20
4 20 100 55
5 20 100 10
9 30 90 180
10 30 90 29
Но я получил результат вроде это
ID Val Val2 Val3
9 30 90 180
10 30 90 29
Пример 2
INSERT INTO table1
(`ID`, `Val`, `Val2`, `Val3`)
VALUES
('1','100','200','90'),
('2','100','200','10'),
('3','100','200','20'),
('19','100','200','20'),
('4','20','100','55'),
('5','20','100','10'),
('6','112','100','20'),
('7','112','100','20'),
('8','90','200','90'),
('9','30','90','180'),
('10','30','90','29');
Ожидаемый результат 2
ID Val Val2 Val3
1 100 200 90
2 100 200 10
4 20 100 55
5 20 100 10
9 30 90 180
10 30 90 29
dbfiddle 2
Пример 3
INSERT INTO table1
(`ID`, `Val`, `Val2`, `Val3`)
VALUES
('1','100','200','aa'),
('2','100','200','aa'),
('3','100','200','aa'),
('19','100','200','ab'),
('4','20','100','SD2'),
('5','20','100','SD1'),
('6','112','100','aa'),
('7','112','100','ab'),
('8','90','200','aa'),
('9','30','90','SF2'),
('10','30','90','SF1');
Ожидаемый результат 3
ID Val Val2 Val3
4 20 100 SD2
5 20 100 SD1
6 112 100 aa
7 112 100 ab
9 30 90 SF2
10 30 90 SF1
Некоторых людей могут спутать с образцом 3, поэтому вот примечания к образцу 3:
Для этого случая ID 19 в примере 3 было то же значение со столбцами val и val2 для идентификаторов 1, 2, 3 (100 и 200), но эти идентификаторы (1, 2, 3) имели такое же значение aa
в val3
, поэтому id 1,2 , 3 должны быть исключены, потому что использование этих идентификаторов не соответствует последнему условию (val, val2, val3) является уникальным. Идентификатор 19 в порядке, но столбец val
dan val2
с повторяющимся значением, равным 1, 2 и 3, уже исключен, это означает, что идентификатор 19 не имеет повторяющихся значений для столбцов val и val2. если в примере 3 были другие данные, такие как '200', '100', '200', 'ae', идентификатор 19 будет включен в результат, потому что он имеет повторяющееся значение рядом с идентификаторами 1,2 и 3.
для образца 3 ID 19 будет включен, если данные в таблице 1 были такими
Образец 3 (другой случай)
INSERT INTO table1
(`ID`, `Val`, `Val2`, `Val3`)
VALUES
('1','100','200','aa'),
('2','100','200','aa'),
('3','100','200','aa'),
('19','100','200','ab'),
('200','100','200','ae'),
('4','20','100','SD2'),
('5','20','100','SD1'),
('6','112','100','aa'),
('7','112','100','ab'),
('8','90','200','aa'),
('9','30','90','SF2'),
('10','30','90','SF1');
Ожидаемый результат будет таким
ID Val Val2 Val3
4 20 100 SD2
5 20 100 SD1
19 100 200 ab
200 100 200 ae
6 112 100 aa
7 112 100 ab
9 30 90 SF2
10 30 90 SF1