найти:
$(".bayItem").on('click', function () {
console.log($(".itemDivImage").find("span").text());
})
Вы можете изменить этот скрипт в соответствии со своими потребностями
Я ВЫБРАЛ бы ОТЛИЧНЫЙ строки и бросил бы их во временную таблицу, затем отбросил бы исходную таблицу и скопировал бы назад данные из временного файла. РЕДАКТИРОВАНИЕ: теперь с фрагментом кода!
INSERT INTO TABLE_2
SELECT DISTINCT * FROM TABLE_1
GO
DELETE FROM TABLE_1
GO
INSERT INTO TABLE_1
SELECT * FROM TABLE_2
GO
Можно ли добавить поле идентификационных данных первичного ключа к таблице?
После чистки текущей путаницы, Вы могли добавить первичный ключ, который включает все поля в таблицу. это помешает Вам попадать в беду снова. Конечно, это решение могло очень хорошо взломать существующий код. Это должно будет быть обработано также.
Manrico Corazzi - я специализируюсь на Oracle, не MS SQL, таким образом, необходимо будет сказать мне, если это возможно как Отпуск производительности boost:-
Вот иначе с данными тестирования
create table #table1 (colWithDupes1 int, colWithDupes2 int)
insert into #table1
(colWithDupes1, colWithDupes2)
Select 1, 2 union all
Select 1, 2 union all
Select 2, 2 union all
Select 3, 4 union all
Select 3, 4 union all
Select 3, 4 union all
Select 4, 2 union all
Select 4, 2
select * from #table1
set rowcount 1
select 1
while @@rowcount > 0
delete #table1 where 1 < (select count(*) from #table1 a2
where #table1.colWithDupes1 = a2.colWithDupes1
and #table1.colWithDupes2 = a2.colWithDupes2
)
set rowcount 0
select * from #table1
Как насчет:
select distinct * into #t from duplicates_tbl
truncate duplicates_tbl
insert duplicates_tbl select * from #t
drop table #t
Что относительно этого решения:
Первый Вы выполняете следующий запрос:
select 'set rowcount ' + convert(varchar,COUNT(*)-1) + ' delete from MyTable where field=''' + field +'''' + ' set rowcount 0' from mytable group by field having COUNT(*)>1
И затем просто необходимо выполнить возвращенный набор результатов
set rowcount 3 delete from Mytable where field='foo' set rowcount 0
....
....
set rowcount 5 delete from Mytable where field='bar' set rowcount 0
, я обработал случай, когда у Вас есть только один столбец, но довольно легко адаптировать тот же подход tomore, чем один столбец. Сообщите мне, хотите ли Вы, чтобы я отправил код.
Я не уверен, работает ли это с Операторами удаления, но это - способ найти дублирующиеся строки:
SELECT *
FROM myTable t1, myTable t2
WHERE t1.field = t2.field AND t1.id > t2.id
я не уверен, можно ли просто изменить "ВЫБОР" на "УДАЛЕНИЕ" (кто-то хочет сообщить мне?) , но даже если Вы не можете, Вы могли бы просто превратить его в подзапрос.
Добавьте столбец идентификационных данных, чтобы действовать как суррогатный первичный ключ и использовать это для идентификации двух из этих трех строк, которые будут удалены.
я рассмотрел бы отъезд столбца идентификационных данных на месте впоследствии, или если это - некоторая таблица ссылки, создайте составной первичный ключ на других столбцах.
Следующий пример работает также, когда Ваш PK является просто подмножеством всех столбцов таблицы.
(Примечание: Мне нравится подход со вставкой другого суррогатного идентификационного столбца больше. Но возможно это решение прибывает удобное также.)
Первая находка дублирующиеся строки:
SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
, Если существуют только немногие, можно удалить их вручную:
set rowcount 1
delete from t1
where col1=1 and col2=1
значение "rowcount" должно быть n-1 временами количество дубликатов. В этом примере существует 2 дубликата, поэтому rowcount равняется 1. Если Вы получаете несколько дублирующихся строк, необходимо сделать это для каждого уникального первичного ключа.
, Если у Вас есть много дубликатов, затем скопируйте каждый ключ однажды в anoher таблицу:
SELECT col1, col2, col3=count(*)
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
Затем копируют ключи, но устраняют дубликаты.
SELECT DISTINCT t1.*
INTO holddups
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
В Ваших ключах у Вас есть теперь уникальные ключи. Проверьте, не получаете ли Вы результата:
SELECT col1, col2, count(*)
FROM holddups
GROUP BY col1, col2
Удаляют дубликаты из исходной таблицы:
DELETE t1
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
Вставляют исходные строки:
INSERT t1 SELECT * FROM holddups
btw и для полноты: В Oracle существует скрытое поле, которое Вы могли использовать (rowid):
DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3... ;
Вот метод, который я использовал , когда я задал этот вопрос -
DELETE MyTable
FROM MyTable
LEFT OUTER JOIN (
SELECT MIN(RowId) as RowId, Col1, Col2, Col3
FROM MyTable
GROUP BY Col1, Col2, Col3
) as KeepRows ON
MyTable.RowId = KeepRows.RowId
WHERE
KeepRows.RowId IS NULL
Это - способ сделать это с Общими Выражениями Таблицы, CTE. Это не включает циклов, никаких новых столбцов или чего-либо и не заставит нежелательных триггеров стрелять (из-за deletes+inserts).
Вдохновленный эта статья .
CREATE TABLE #temp (i INT)
INSERT INTO #temp VALUES (1)
INSERT INTO #temp VALUES (1)
INSERT INTO #temp VALUES (2)
INSERT INTO #temp VALUES (3)
INSERT INTO #temp VALUES (3)
INSERT INTO #temp VALUES (4)
SELECT * FROM #temp
;
WITH [#temp+rowid] AS
(SELECT ROW_NUMBER() OVER (ORDER BY i ASC) AS ROWID, * FROM #temp)
DELETE FROM [#temp+rowid] WHERE rowid IN
(SELECT MIN(rowid) FROM [#temp+rowid] GROUP BY i HAVING COUNT(*) > 1)
SELECT * FROM #temp
DROP TABLE #temp
Это - жесткая ситуация, чтобы быть в. Не зная Вашей конкретной ситуации (размер таблицы и т.д.) я думаю, что Ваш лучший выстрел должен добавить столбец идентификационных данных, заполнить его и затем удалить согласно ему. Можно удалить столбец позже, но я предложил бы, чтобы Вы сохранили его, поскольку это - действительно хорошая вещь иметь в таблице