powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбор из двух таблиц
29 сообщений из 29, показаны все 2 страниц
Выбор из двух таблиц
    #36658431
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

Подскажите как выбрать данные

две таблицы одна полная другая эта же но не полная как выбрать недостающие данные
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658449
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рус5,

Код: plaintext
select tbl1.* from tbl1 left join tbl2 on tbl1.id=tbl2.id where tbl2.id is null

1)вместо ид поставить поле, по которому связаны таблицы
2)читать про select-sql, join
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658464
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно ли по четырем полям, потому что очень много повторяющихся записей
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658491
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рус5можно ли по четырем полям, потому что очень много повторяющихся записей
пропиши четыре поля в условие объединения
Код: plaintext
select tbl1.* from tbl1 left join tbl2 on tbl1.id1=tbl2.id1 and tbl1.id2=tbl2.id2 and tbl1.id3=tbl2.id3 and tbl1.id4=tbl2.id4 where tbl2.id is null
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658667
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не пойму не фига пустая таблица выходит

знаю что 1/3 записей не хватает
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658684
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просьба подсказать добавил поле ID как расставить автоматически нумерацию строк
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658696
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... Давайте структуру таблиц, что там за данные, как связаны и что вы хотите получить. А то сейчас понаворотите "ИД", потом не разгребётесь...
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658814
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помошщь охото самому понять

Почемуто ошибку вадает

use T1.dbf in 0 alias detT1
pnNum=1;
select T1;
go top;
scan id = alltrim(str(pnNum));
pnNum=pnNum+1;
endscan
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658823
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Рус5
> Почемуто ошибку вадает

Какую? Зачем точки с запятой в конце каждой строки? Что вообще хочешь сделать этим сканом?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658835
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать про скан
потом про replace()
а потом можно и про update() с recno() :))

авторохото самому понятьПока мы не поймём, помочь вам не сможем.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658841
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно точки с запятой не надо

Хочу чтобы каждой строке скан добавил свой уникальный ID
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658864
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обе таблицы t1 и t2 одинаковой структуры
Полно данных практически с одинаковыми полями

F Carakter(10)
F Carakter(10)
F Carakter(10)
F DATE(8)
+
разные


t1 Полная таблица
t2 не полная таблица

нужно t1-t2=t3
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658868
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СОРИ

F Carakter(10)
I Carakter(10)
O Carakter(10)
DR DATE(8)
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658931
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рус5Здравствуйте

Подскажите как выбрать данные

две таблицы одна полная другая эта же но не полная как выбрать недостающие данные
Для начала - версия фокса.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658962
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
9
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36658986
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рус5Здравствуйте
Подскажите как выбрать данные
две таблицы одна полная другая эта же но не полная как выбрать недостающие данные
Вопрос № 2 : что есть такое "недостающие данные" ?
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659007
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
10 000 записей в одной

7 500 в другой


2 500 мне надо чтобы получилось
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659089
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуй то как проставить автоматически id строкам 1,2,3.............
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659149
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример запроса выше не совсем правильный был. Надо HAVING использовать, а не WHERE
Примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create cursor t1 (F c( 10 ), I c( 10 ), O c( 10 ), D d)
insert into t1 values ('Иванов', 'Иван', 'Иваныч', {^ 1980 - 03 - 05 })
insert into t1 values ('Сидоров', 'Сидор', 'Сидорыч', {^ 1981 - 03 - 05 })
insert into t1 values ('Петров', 'Петр', 'Петрович', {^ 1982 - 03 - 05 })

create cursor t2 (F c( 10 ), I c( 10 ), O c( 10 ), D d)
insert into t2 values ('Иванов', 'Иван', 'Иваныч', {^ 1980 - 03 - 05 })
insert into t2 values ('Сидоров', 'Сидор', 'Сидорыч', {^ 1981 - 03 - 05 })

select t1.* from t1 left join t2 on t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D;
	having t2.F is NULL
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659171
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему Having, а не Where?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659207
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
А почему Having, а не Where?

Как я понимаю в подобных запросах Where отрабатывает по исходной таблице, т.е. сначала фокс возьмет записи из t2 где t2.F is NULL - таких нет.
Having же накладывается на результат запроса.

PS пример кода я привел, попробуй замени Having на Where, увидишь что ни одной записи не выберется.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659224
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Dima T
> PS пример кода я привел, попробуй замени Having на Where, увидишь что ни одной записи не выберется.

Заменил, вернулась таже "лишняя" запись. VFP9sp2 с вроде последним
HotFix'om
Я внешними соединениями часто проверяю данные на соответствие справочникам, при импорте. Всегда пользовался where. Хотя
в данном случае они идентичны, но having - это все-таки фильтрация по сгруппированным результатам.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659259
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
Заменил, вернулась таже "лишняя" запись. VFP9sp2 с вроде последним


Попробовал в VFP9sp2 - действительно нет разницы where или having.
Я еще не совсем переехал с VFP6sp5 (тут и пробовал), там со where ни одной записи не выбирается. Значит пофиксили эту ошибку в 9-ке.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36659858
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПример запроса выше не совсем правильный был. Надо HAVING использовать, а не WHERE
Примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create cursor t1 (F c( 10 ), I c( 10 ), O c( 10 ), D d)
insert into t1 values ('Иванов', 'Иван', 'Иваныч', {^ 1980 - 03 - 05 })
insert into t1 values ('Сидоров', 'Сидор', 'Сидорыч', {^ 1981 - 03 - 05 })
insert into t1 values ('Петров', 'Петр', 'Петрович', {^ 1982 - 03 - 05 })

create cursor t2 (F c( 10 ), I c( 10 ), O c( 10 ), D d)
insert into t2 values ('Иванов', 'Иван', 'Иваныч', {^ 1980 - 03 - 05 })
insert into t2 values ('Сидоров', 'Сидор', 'Сидорыч', {^ 1981 - 03 - 05 })

select t1.* from t1 left join t2 on t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D;
	having t2.F is NULL

Можно объяснить, зачем выбирать ВСЕ, чтобы потом из этого "всего" что-то там исключать? Почему не писать "в лоб". Выбрать записи, которых не существует в другой таблице?

Код: plaintext
1.
2.
3.
select t1.* ;
from t1 ;
where not exists(select 'x' from t2 ;
    where t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D)

PS: Насчет оптимизации. Проводили опыты на VFP6SP5. Результат практически одинаковый.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36660379
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем запросы работают НО

////10 000 записей в одной
///7 500 в другой
///2 500 мне надо чтобы получилось


вместо 2 500 выдает 3 100 ПОЧЕМУ ?
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36660383
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а этот выдает пустую таблицу

select t1.* from t1 left join t2 on t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D;
having t2.F is NULL
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36660392
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пользуйтесь тегом SRC
Рус5вместо 2 500 выдает 3 100 ПОЧЕМУ ?мб потому что в малой таблице есть одинаковые записи? Запрос
Код: plaintext
select count(*) from tbl2 group by f,i,o,dr having count(*)> 1 
что-нибудь выдаёт?
Рус5а этот выдает пустую таблицу
Код: plaintext
1.
select t1.* from t1 left join t2 on t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D;
	having t2.F is NULL
А так?
Код: plaintext
1.
select t1.* from t1 left join t2 on t1.F = t2.F and t1.I = t2.I and t1.O = t2.O and t1.D = t2.D;
	where t2.F is NULL
И вообще забудьте про хэвинг без групбая. Всё надо использовать по месту.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36660743
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рус5Спасибо всем запросы работают НО

////10 000 записей в одной
///7 500 в другой
///2 500 мне надо чтобы получилось

вместо 2 500 выдает 3 100 ПОЧЕМУ ?
Если Вы про запрос через Exists(), то ведь запрос возвращает не арифметическую разницу количества записей, а те записи, которые есть в одной, но нет в другой таблице.

Ну, например, в первой таблице есть 2 записи со значением поля AA, например, 1 и 2. А во второй таблице есть тоже две записи, но со значением поля AA, например, 3 и 4.

Если теперь отобрать из первой таблице те записи, значения поля AA в которой нет во второй таблице, то, очевидно, будут отобраны ВСЕ записи первой таблицы.А вовсе не ожидаемое ноль, как арифметическая разница 2 - 2 = 0. Ведь ни значения 1, ни значения 2 нет во второй таблице.

Другими словами, опираться на количество записей как предполагаемый результат - бессмысленно. Важно вовсе не количество записей, а их содержимое.
...
Рейтинг: 0 / 0
Выбор из двух таблиц
    #36661045
Рус5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО ВСЕМ !!!
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбор из двух таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]