Запрос исключений в MySQL

stm7884696

Предыстория:
Есть два таблицы: data1 и data2
В data1 3 поля : id (уникальное, автоинкримент mid (не участвует name (varchar). в data2 k полей, из которых выжны 3 : id (уникальное, автоинкримент m2id (по идее связано с data1.id 1 -> N data2.m2id ; один ко многим) и name (varchar). data1.name и data2.name содержат одинаковые значения, если data1.id = data2.m2id .
Суть вопроса:
в data1 была утеряна часть данных, вследствии чего появились непривязаные данные в data2, где data2.m2id > 755 и <30000; примерно - 500 строк из data2 для потерянных 25 из data1, остальное - просто мусор из дубликатов. Известно так же, что если data2.name не находится в data1.name и data2.m2id>755, то это как раз потеряная строка!
Задача: Восстановить потерянные строки, или хотя-бы их получить селектом...
Попробовал:
SELECT data2.id FROM `data1`, `data2` WHERE data2.name != data1.name and data2.m2id > 755 order by data2.m2id

- получил ответ из более 17000000 строк, который я так понял получился в результате тольк фактериала, то-ли еще чего...
Если вместо != поставить = , то выделяет все правильные связи, а сломанные и мусор оставляет за бортом...

stm7884696

Вообще, как писать запросы, которые выводят то, что НЕ найдено по заданным параметрам?
т.е. если есть 1,2,3,4,5,6 и я задаю выбор по 1-3, как модифицировать запрос, что бы было НЕ 1-3 а все остальное ?

Dasar

например так:


SELECT data1.id FROM `data1` WHERE data1.m2id > 755 and
data1.name not in (select name from 'data2')
order by data1.m2id

stm7884696

SELECT model_id
FROM `detail1`
WHERE tysp NOT
IN (
SELECT name
FROM `model`
)
LIMIT 0 , 30
Ответ MySQL:
- You have an error in your SQL syntax near 'SELECT name
FROM `model` ) LIMIT 0, 30' at line 5

stm7884696

SELECT distinct detail1.tysp, detail1.model_id FROM detail1 LEFT JOIN model ON model.name like detail1.tysp
WHERE model.name IS NULL and detail1.model_id > 755 order by detail1.tysp limit 0,100;
теперь работает
Оставить комментарий
Имя или ник:
Комментарий: