|
|
|
| Господа!
Подскажите, пожалуйста: есть две таблицы абсолютно идентичной структуры, колонки все одинаковые. Нужно вывести запросом из первой таблицы все записи, идентичные записям во второй таблице. Идентичнойсть проверяется по строгому соответствию (1==1) информации в нескольких полях этих записей. Т.е. что-то типа where table1.col1=table2.col1 AND table1.col2=table2.col2 AND table1.col3=table2.col3
Как это сделать наиболее оптимально? | |
|
|
|
|
|
|
|
для: DDK
(24.08.2008 в 22:28)
| | Первичные ключи у таблиц есть?
И есть ли столбцы с пустыми (NULL) значениями? | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 22:58)
| | первичные есть (id), но они не несут никакой информационной ценности и созданы были мной просто в дополнение для удобаства манипулирования записями. NULL'ей нет, формат данных в каждом поле жёсткий и ошибочно заполненных записей, выбивающихся из этого жёсткого формата нет, что позволяет искать совпадения строго по знаку равенства (=). | |
|
|
|
|
|
|
|
для: DDK
(24.08.2008 в 23:07)
| | Если это разовая акция , то с чем связан вопрос?
Запрос в лоб слишком долго выполняется? | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 23:12)
| |
SELECT bg.* FROM tmp_big bg, tmp_small sm
WHERE bg.col1=sm.col1 AND bg.col2=sm.col2 AND bg.col3=sm.col3
|
Так ?
(Честно говоря, не уверен был в правильности данной конструкции и попутно хотел ещё примеры увидеть) | |
|
|
|
|
|
|
|
для: DDK
(24.08.2008 в 23:51)
| | так. | |
|
|
|
|
|
|
|
для: DDK
(24.08.2008 в 23:51)
| | Можно узнать - это только на один раз или планируете в скрипте на постоянной основе использовать? Если да, то почему именно так? | |
|
|
|
|
|
|
|
для: BinLaden
(25.08.2008 в 01:30)
| | 1) Задача скрипта - разовое вполнение задачи.
2) потом что не знаю, как по-другому :)) | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 02:12)
| | > потом что не знаю, как по-другому
А какую цель преследуете? Такое ощущение, что Вам нужно просто добавить допольнительный столбец. | |
|
|
|
|
|
|
|
для: BinLaden
(25.08.2008 в 02:32)
| | Цель проста - заливаются данные в две временные таблицы, нужно найти в этих двух таблицах идентичные записи. | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 02:43)
| | Не хотите говорить значит. Ну ладно. | |
|
|
|
|
|
|
|
для: BinLaden
(25.08.2008 в 02:47)
| | Да для работы просто надо - сверять отчёты, чтобы дочерние компании не наё***ли :))) Ну зачем вдаваься в подробности... простая автоматизация ручного труда! | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 04:45)
| | А почему бы не ввести дополонительный столбец для идентификатора дочерней компании? | |
|
|
|
|
|
|
|
для: BinLaden
(25.08.2008 в 11:27)
| | Потому что оно не нужно :) Скрипт удет работать в виде сервиса - зашёл, загрузил файл1 и файл2 (в оригинале они в DBF, перегоняются в mysql для удобства и скорости работы, т.к. записей в бОльшей базе очень много), нажал кнопочку - получил мгновенно результат - распечатал и доволен :) | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 12:09)
| | Они оба в DBF?
Если большая база своя - зачем её каждый раз гонять из dbf в sql? | |
|
|
|
|
|
|
|
для: Trianon
(25.08.2008 в 12:12)
| | Потому что у PHP'шного расширения для работы с DBF очень убогий набор функций, позволяющий разве что выбирать из БД записи перебором по порядку, либо по номеру конкретной записи. Соответственно делать поиск одинаковых записей в двух базах - это как ни крути цикл на 1500 записей внутри цикла на 8000 записей, ибо никаким языком запросов там и не пахнет... it's terrible! | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 12:39)
| | Это понятно, я о другом.
Меняется, как я понял, только чужой DBF. Почему нельзя оставить sql-копию своего (большого) файла до следующего раза? | |
|
|
|
|
|
|
|
для: Trianon
(25.08.2008 в 12:42)
| | Так она и стаётся :) Просто в самом начале скрипта делается TRUNCATE TABLE обеим временным таблицам. Накапливать данные - такой задачи не стоит. | |
|
|
|
|
|
|
|
для: DDK
(25.08.2008 в 12:44)
| | В своей копии можно было бы создать столбик с хешем чувствительных полей и проиндексировать его.
Аналогичный индекс строкить при конвертированиикороткого dbf.
Тогда не исключено, что поиск совпадений можно было бы ускорить.
Конечно, если данные не сохраняются, овчинка выделки не стоит. | |
|
|
|