Форум: "Базы";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
ВнизВложенный запрос Найти похожие ветки
← →
Shoo (2002-03-11 12:16) [0]Мастера, объясните, плз, каким образом можно получить dataset, состоящий из всех записей 1-ой таблицы, которых нет во 2-ой. пробовал 2-мя способами (ниже), но результат неверен. В SQL, увы, не силен.
1.
select * from t$bundles
where t$bundles.f$bbarkod not in
(select t$bundlesbak.f$bbarkod from t$bundlesbak)
2.
select * from t$bundles
where not exists
(select t$bundlesbak.f$bbarkod from t$bundlesbak where t$bundlesbak.f$bbarkod = t$bundles.f$bbarkod)
← →
deleon (2002-03-11 12:36) [1]А по структуре таблицы идентичны ?
← →
JibSkeart (2002-03-11 12:38) [2]SELECT A.*,B.MyField FROM Table1 a,Table2 b
а на твоем примере будет так
select A.*,B.f$bbarkod From t$bundles A,t$bundlesbak B
where B.f$bbarkod = A.f$bbarkod
Попробуй !!
← →
Shoo (2002-03-11 14:50) [3]2JibSkeart:
Прошу прощения за задержку с ответом.
Если я правильно понял, твой запрос возвращает данные, которые есть в обоих таблицах, а мне нужны те, которые есть в первой, но нет во второй.
← →
roottim (2002-03-11 15:02) [4]а может верен?
по скл в пр все нормально!...
← →
JibSkeart (2002-03-11 18:50) [5]Ну может быть вам нужно было так ???
select A.* From t$bundles A,t$bundlesbak B
where B.f$bbarkod = A.f$bbarkod
Дело в том что вопрос не очень Понятен !!!
← →
aus (2002-03-11 18:56) [6]Не понятно, чем не верен твой первый запрос, вроде все правильно, в чем ты видишь ошибку?
← →
JibSkeart (2002-03-11 19:02) [7]Да нет ошибки ни в том ни в другом случае нету
Просто в первом случае
выводится все поля из первай таблички + одно поле из второй
а во втором
выводятся только поля из первой таблички, а из второй нет .
Вот и все !
← →
roottim (2002-03-12 08:43) [8]2JibSkeart
> Просто в первом случае
> выводится все поля из первай таблички + одно поле из второй
это ты про свои случаи?
а если см авторские... то должно все работать
никакого + поле из второй - там нет...
вариант автору: накидать для эксперимента 2 одинаковые табл.. забить их должнгым образом, и проверить ваши скл запросы... выполнены они вполне грамотно
← →
Shoo (2002-03-12 09:10) [9]2roottim:
Пришлось поковырять таблицы ручками, выяснилось следующее:
оказывается, совпадение должно быть не полностью по значениям полей, а по первым 30 символам (тип - строка). Идиотизм, конечно, полный. Есть ли какие соображения по этому поводу?
В таком виде (ниже) запрос вроде выполняется, но я жду уже более 20 мин и результата пока нет (кстати, в каждой таблице порядка 60-70 тыс. записей):
select * from t$bundles
where left(t$bundles.f$bbarkod, 30) not in
(select left(t$bundlesbak.f$bbarkod, 30) bbarkod from t$bundlesbak)
← →
roottim (2002-03-12 09:22) [10]это все верно!... , а долго потому что сравнение идет на стороне клиента... и пока оно переработает все записи долго... 60-70 это не мало...
предложение тогда такое... сделать вид на стороне сервера... и пользоваться им... самый думаю рациональный способ...
посмотри только какие там функции выполнят операцию типа Left
← →
Shoo (2002-03-12 09:23) [11]Всем спасибо, прошу прощения, если кого отвлек от важных дел.
Разобрался сам. В качестве оправдания, решение моей задачи ниже, может кому пригодится. :)
select * from t$bundles
where not exists
(select t$bundlesbak.f$bbarkod from t$bundlesbak
where left(t$bundlesbak.f$bbarkod, 30) = left(t$bundles.f$bbarkod, 30))
← →
Shoo (2002-03-12 09:32) [12]Прошу прощения за маленькое дополнение. Последний приведенный мною запрос дает набор данных из порядка 8 тыс записей и отрабатывает на двух моих таблицах всего 5 секунд!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c