У меня есть таблица с двумя столбцами, значения одного столбца равны нулю, а другой столбец имеет много повторяющихся значений и пробелов. как я могу удалить повторяющиеся значения и пробелы из этого столбца с помощью запроса?

0
bz.morvarid 8 Сен 2016 в 15:17

6 ответов

Лучший ответ

Вы можете использовать временную таблицу для этой задачи, как показано ниже:

SELECT DISTINCT * INTO #tmpTable FROM MyTable
TRUNCATE TABLE MyTable
INSERT INTO MyTable SELECT * FROM #tmpTable
2
Susang 8 Сен 2016 в 13:17

Один из способов сделать это - использовать CTE.

create table #dups (col1 int, col2 int)
insert into #dups
select null,null union all
select null,1 union all
select null,1 union all
select null,1 union all
select null,2 union all
select null,2 union all
select null,3 union all
select null,null
select * from #dups
;WITH cte
     AS (SELECT col1,col2,ROW_NUMBER() OVER (PARTITION BY  Col1,Col2 
                                       ORDER BY ( SELECT 0)) RN
         FROM   #dups
        )
DELETE FROM cte
WHERE  RN > 1 OR col2 is null
0
Abhishek 8 Сен 2016 в 12:49

Вы можете создать пустую копию таблицы. Затем вы запускаете INSERT INTO new_table SELECT DISTINCT * FROM old_table. Наконец, отбросьте старую таблицу и переименуйте новую.

0
Chris Tophski 8 Сен 2016 в 12:39

1) Если вы хотите сохранить строку с наименьшим значением id:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name

2) Если вы хотите сохранить строку с наивысшим значением идентификатора:

DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name

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

Протестировано с MySQL 5.1

Не уверен насчет других версий см. Ссылку

Удалить все повторяющиеся строки, кроме одной в MySQL?

0
Community 23 Май 2017 в 12:33

Если я правильно понял, вы хотите избежать для column2 NULL и пробелов?

SELECT COLUMN1, COLUMN2 FROM TABLE 
GROUP BY
  COLUMN1, COLUMN2 
WHERE
  COLUMN2 NOT NULL AND COULMN2 <> ''

Этот запрос будет показывать результаты только тогда, когда COLUMN2 имеет некоторые данные.

0
Pedro Augusto Freitas de Souza 8 Сен 2016 в 13:40

Попробуй это

DELETE FROM [Table]
WHERE     (ColmnB IN
                      (SELECT     ColumnB
                         FROM         [Table] AS Table_1
                         GROUP BY ColumnB
                         HAVING      (COUNT(*) > 1))) OR
                  (RTRIM(LTRIM(ISNULL(ColumnB,''))) = '')

Стол имеет буксирную колонку. первый столбец - нулевое значение. второй столбец имеет повторяющееся значение и пустое значение.

0
mahmood kabi 8 Сен 2016 в 16:40