要找到您要查找的行,您需要在doc_nr
上執行self join,僅包括那些描述不匹配的行,SQL Fiddle。
CREATE TABLE basic
(
column_ref INT,
description VARCHAR(30),
dateField DATETIME,
amount DECIMAL(12,2),
doc_nr VARCHAR(30)
);
INSERT INTO basic (column_ref, description, dateField, amount, doc_nr)
VALUES (123, 'Cobra - Ni', '06/11/2015',505.50,'2000/10'),
(123, 'Cobra - Toung', '07/11/2015',505.50,'2000/12'),
(123, 'Cobra - Brain', '07/11/2015',505.50,'2000/25'),
(123, 'Cobra - Nisyor', '07/11/2015',505.50,'2000/10');
SELECT *
FROM basic b
JOIN basic q ON b.doc_nr = q.doc_nr
WHERE b.description != q.description
╔════════════╦════════════════╦════════════════════════╦════════╦═════════╦════════════╦════════════════╦════════════════════════╦════════╦═════════╗
║ column_ref ║ description ║ dateField ║ amount ║ doc_nr ║ column_ref ║ description ║ dateField ║ amount ║ doc_nr ║
╠════════════╬════════════════╬════════════════════════╬════════╬═════════╬════════════╬════════════════╬════════════════════════╬════════╬═════════╣
║ 123 ║ Cobra - Ni ║ June, 11 2015 00:00:00 ║ 505.5 ║ 2000/10 ║ 123 ║ Cobra - Nisyor ║ July, 11 2015 00:00:00 ║ 505.5 ║ 2000/10 ║
║ 123 ║ Cobra - Nisyor ║ July, 11 2015 00:00:00 ║ 505.5 ║ 2000/10 ║ 123 ║ Cobra - Ni ║ June, 11 2015 00:00:00 ║ 505.5 ║ 2000/10 ║
╚════════════╩════════════════╩════════════════════════╩════════╩═════════╩════════════╩════════════════╩════════════════════════╩════════╩═════════╝
爲了真正DELETE
行,用下面的(前提是你要DELETE
具有較短的描述行,你的實際標準可能會有所不同)取代上述SELECT
聲明。
DELETE b
FROM basic b
JOIN basic q ON b.doc_nr = q.doc_nr
WHERE LEN(b.description) < LEN(q.description);
對上述語法here的評價。
訂單欄在哪裏? –
您專門搜索具有*不同*描述的項目,然後您希望它是相同的? – Luaan
I.e.當同一日期有多行時,你如何選擇第一個/最後一個? – jarlh