Как сравнить значение между двумя столбцами в одной строке, если они разные, создать другую строку?

У меня в MySQL есть следующая таблица:

id | item_id | uom | uom1
1    1         kg    box

Когда я выберу все из таблицы, отобразится одна строка.

Я хочу, чтобы отображались две строки, если uom и uom1 разные.

Например, uom = kg и uom1 = box, тогда в результате будет отображаться

id | item_id | uom
1    1         kg
2    1         box

если и uom, и uom1 одинаковы (кг), то будет отображаться только одна строка

id | item_id | uom
1    1         kg

Можно ли это сделать с помощью sql? Тогда я просто зациклю его на свой взгляд.

В вашем примере оба идентификатора не могут быть 1, также вы хотите обновить свою таблицу новой строкой?

Saurabh 22.05.2018 07:51

@Saurabh извините, опечатка для id. Да, я буду хранить данные, используя индикацию, чтобы определить, является ли uom или uom1

Crazy 22.05.2018 07:54

кажется, слово в теме "создать" следует поменять ... на "показать" или подобное

Jacek Cz 22.05.2018 08:00
Освоение архитектуры микросервисов с 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
3
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

select 
  @rownum := @rownum + 1 AS id,
  T.* 
from (
    select  `item_id`, `uom`
    from Table1

    union

    select  `item_id`, `uom1` as `uom`
    from Table1
) T , (SELECT @rownum := 0) r

| id | item_id | uom |
|----|---------|-----|
|  1 |       1 |  kg |
|  2 |       1 | box |

DEMO SQL Fiddle

Union требуется вместо Union All.

Fahad Anjum 22.05.2018 07:56
Ответ принят как подходящий

Один простой способ сделать это:

select id, item_id, uom from tbl union
select id, item_id, uom1 from tbl

UNION по умолчанию отфильтровывает повторяющиеся строки. В дальнейших «ухищрениях» нет нужды ...

@Neeraj Wadhwa предложил изменить вторую строку на:

select id, item_id, uom1 as uom from tbl

Это возможно и даст тот же результат, но на самом деле это не обязательно. Имена столбцов в конструкции UNION в любом случае будут определяться первым оператором select.

Думаю, здесь должен помочь простой союз:

select distinct * from (
  select id, item, uom1 as uom from stuff
    union
  select id, item, uom2 as uom from stuff
  ) as unionised
order by unionised.id

Это рабочий пример: http://sqlfiddle.com/#!9/ece687/1

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