Forum Webscript.Ru
Общие => Базы данных => Тема начата: new_coder от 30 Ноября 2007, 16:38:07
-
есть одинаковые структуры хранящиеся в двух таблицах
table1
code
name
table2
code
name
как из table1 выбрать строки которых нет в table2 (определяю по code)
немогу составить запрос.
-
Вариант:
SELECT * FROM `table1` WHERE `code` NOT IN (SELECT `code` FROM `table2`)
-
[eq, у меня тоже есть вариант )))
предпологаем что пара код name соответствуют в обоих таблицах, ато если это не так то нужно по другому подходить к вопросу.
кстати зачем такой выбор?
SELECT * FROM (
SELECT t1.*, t2.`name` as t2_name
FROM `table1`t1 LEFT JOIN `table2` t2 USING (`code`)
) tt
WHERE tt.t2_name IS NULL
не пробывал конешно, но должно сработать ))
а по другому это так:
SELECT * FROM table1
WHERE code NOT IN (
SELECT code
FROM `table1` t1 INNER JOIN `table2` t2
USING (`code`, `name`)
)
-
for_i_0
Решение правильное,
но ошибочное при большой базе данных, выдаст переполнение памяти.
можно так:
SELECT * FROM table1 t1
WHERE (
SELECT 1
FROM table2 t2 where t2.code=t1.code limit 1
) is null
но это долгий вариант.
-
Altaxar:
for_i_0
Решение правильное,
но ошибочное
вобще сильно сказано )))))
честно говоря даже не понял как будет проходить ваш запрос - план запроса каков? интересно?
-
ravshaniy
запрос for_i_0 имеет недостаток в большой базе данных, под запрос вернет список code в виде массива, что и может создать ошибку при большой обьеме данных.
Мой метод возвращает 1 если есть в таблицы table2 code и если нету то null по этому признаку из первой таблицы и выводится результат.
я не проверял, но принцип такой.
-
Altaxar:
Мой метод возвращает 1 если есть в таблицы table2 code и если нету то null по этому признаку из первой таблицы и выводится результат.
вы знаете там в корне все не правильно
видите ли сначала будет исполняться подзапрос
Altaxar:
SELECT 1
FROM table2 t2 where t2.code=t1.code limit 1
и он обязательно ругнется на t1, потому что он не знает что такое t1. подзапрос он совсем не связан с запросом в целом.
опять же я не тестирую, но думаю я прав.
помоему нам уже нужно начать тестировать )))
-
Ты бы сначала проверил, а потом выступал.
Работает даже такое:
UPDATE a SET a.x = (SELECT COUNT(b.id) FROM b WHERE b.y = a.z)
-
нда работает кстати. не прав прошу прощения