2015-09-06 2 views
0

У меня есть таблица, скажем, имеет цвет в одной области и формы в другую, но в произвольном порядке поля:Найти записи без обратной записи в таблице тузд

FIELD1 | FIELD2 
---------|---------- 
Red  | Triangle 
Red  | Square 
Red  | Circle 
Triangle | Red 
Square | Red 

Я пытаюсь найти записи, НЕ имейте обратную запись и создайте ее. Таким образом, в приведенном выше таблице там нет взаимного для

Red | Circle 

пока есть для

Red | Triangle 
Red | Square 

ли запрос, который будет а) определить, какие записи не имеет обратного 2) Создание тех записи?

ответ

1

Вы можете сделать следующее:

SELECT a.FIELD2, a.FIELD1 FROM tbl a 
LEFT JOIN tbl b ON b.FIELD2=a.FIELD1 AND b.FIELD1=a.FIELD2 
WHERE b.FIELD1 is NULL 

Смотрите здесь для рабочего примера: SQLfiddle1

SELECT присоединяется таблицу на себя, глядя на обратной записи. Если эта запись не найдена, то запись исходной таблицы указана с порядком перевернутых столбцов.

Чтобы создать недостающие записи просто использовать выход в INSERT заявлении как:

INSERT INTO tbl (FIELD1,FIELD2) 
SELECT a.FIELD2, a.FIELD1 FROM tbl a 
LEFT JOIN tbl b ON b.FIELD2=a.FIELD1 AND b.FIELD1=a.FIELD2 
WHERE b.FIELD1 is NULL 

Демонстрация полного примера SQLfiddle2.

+0

Спасибо. Я тестирую это сейчас (моя большая таблица), но это, похоже, работает в запросе на обновление. FYI моя другая идея, поскольку на самом деле два поля представляют собой 5-значные целые числа, которые я думал о создании поля «Продукт», умножая каждое поле А и В (например, 92451 | 90451 создает поле «Продукт» 8362285401), а затем я могу просто подсчитать (*), где это 1 – user3649739

Смежные вопросы