Как запросить, где один и тот же идентификатор имеет другое значение в определенном столбце Mysql

У меня есть таблица, указанная ниже:

ID      Val1
1       AVD1R
1       ART1R
2       CFD4E
3       DER1R
3       DER1F

Я хочу получить те записи, в которых один и тот же ID находится более одного раза с разными Val1.

Требуемый вывод:

ID      Val1
1       AVD1R
1       ART1R
3       DER1R
3       DER1F

Я пробовал это: select id, Val1 from Table1 where count(Val1)>1 group by id; Но не вышло.

Используйте простую группу по идентификатору и где count (*)> 1

Sloan Thrasher 24.03.2018 15:19

@SloanThrasher Я пробовал этот select id, Val1 from Table1 where count(Val1)>1 group by id;, но он не работал.

Rahul shah 24.03.2018 15:22

Почему строки с ID = 3 не отображаются в результате?

Paul Spiegel 24.03.2018 15:34

@PaulSpiegel Потому что оба значения в столбце Val1 для ID=3 одинаковы.

Rahul shah 24.03.2018 15:41
DER1р - это то же самое, что DER1F?
Paul Spiegel 24.03.2018 15:42

@PaulSpiegel Простите, что плохо.

Rahul shah 24.03.2018 15:43

@PaulSpiegel Спасибо, я исправил вопрос.

Rahul shah 24.03.2018 15:43
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
7
44
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

SELECT a.* FROM (
    SELECT ID, Val1, COUNT(*) AS Cn FROM Table1 GROUP BY ID, Val1) AS a
LEFT JOIN (
    SELECT ID, COUNT(*) AS Cn FROM Table1 GROUP BY ID
) AS b ON a.ID = b.ID
WHERE a.Cn <> b.Cn

Мне нужны только те строки, в которых есть несколько одинаковых ID, но с разными Val1.

Rahul shah 24.03.2018 15:46

@ Рахул шах - извини, я изменил свой ответ

Bernd Buffen 24.03.2018 16:02
Ответ принят как подходящий

Извините, я изменил свой ответ на:

SELECT t1.* FROM Table1 t1
INNER JOIN Table1 t2 
  ON t1.id=t2.id AND t1.VAl1 <> t2.Val1;

Образец

MariaDB [bernd]> select * from Table1;
+----+-------+
| id | VAl1  |
+----+-------+
|  1 | AVD1R |
|  1 | ART1R |
|  2 | CFD4E |
|  3 | DER1R |
|  3 | DER1F |
+----+-------+
5 rows in set (0.00 sec)

MariaDB [bernd]> SELECT t1.* FROM Table1 t1
    -> INNER JOIN Table1 t2 ON t1.id=t2.id AND t1.VAl1 <> t2.Val1;
+----+-------+
| id | VAl1  |
+----+-------+
|  1 | ART1R |
|  1 | AVD1R |
|  3 | DER1F |
|  3 | DER1R |
+----+-------+
4 rows in set (0.00 sec)

MariaDB [bernd]> 
Count(*) не будет работать, потому что у меня есть много других столбцов в таблице, но я хочу сравнить ID с Val1. Хочу только те записи, где Val1 отличается от одного и того же ID.
Rahul shah 24.03.2018 15:52

Вы видели новый ответ без count () :-)

Bernd Buffen 24.03.2018 16:08

Вы получите дубликаты, если на каждый ID будет больше двух строк.

Paul Spiegel 24.03.2018 16:14

@Paul Spiegel - спасибо - для предотвращения дублирования вы можете добавить группировать по id, t1.Val1;

Bernd Buffen 24.03.2018 16:16

Я не знаю, что это за другие столбцы.

Но в SQL Server:

select distinct a.id,val1 from
(
select id,val1
from different
)a
inner join
(
select id,count(id) as cnt
from different 
group by id
having count(*)>1
 ) b
  on  a.id=b.id

Другие вопросы по теме