powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / почему select через in работает, а через inner join - нет?
7 сообщений из 7, страница 1 из 1
почему select через in работает, а через inner join - нет?
    #34149116
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет!
Помогите разобраться в select-ах
не работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT ;
     PCs.PCID,;
     PCs.PCName,;
     PCs.ComputerID;
  FROM PCs;
     INNER JOIN curSelectedPCs ON curSelectedPCs.PCID = PCs.PCID ;
  WHERE NOT PCs.Archived ;
  INTO CURSOR curAddablePCs;
  READWRITE 
работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT ;
     PCs.PCID,;
     PCs.PCName,;
     PCs.ComputerID;
  FROM PCs;
  WHERE NOT PCs.Archived AND PCID NOT in (SELECT PCID FROM curSelectedPCs);
  INTO CURSOR curAddablePCs;
  READWRITE 

я пытаюсь сбиться с NOT in перейдя на INNER JOIN и не получается...

ЗЫ База curSelectedPCs при этом пуста, ее структура аналогична PCs.

thx
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149208
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример, показывающий, как работает иннер джоин

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create cursor tt (n i)
for i= 1  to  10 
insert into tt values (i)
endfor

create cursor pp (n i)
insert into pp values ( 3 )
insert into pp values ( 5 )

select * ;
	from tt ;
		inner join pp on tt.n=pp.n
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149218
CTAC-KOпривет!
Помогите разобраться в select-ах
не работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT ;
     PCs.PCID,;
     PCs.PCName,;
     PCs.ComputerID;
  FROM PCs;
     INNER JOIN curSelectedPCs ON curSelectedPCs.PCID = PCs.PCID ;
  WHERE NOT PCs.Archived ;
  INTO CURSOR curAddablePCs;
  READWRITE 
работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT ;
     PCs.PCID,;
     PCs.PCName,;
     PCs.ComputerID;
  FROM PCs;
  WHERE NOT PCs.Archived AND PCID NOT in (SELECT PCID FROM curSelectedPCs);
  INTO CURSOR curAddablePCs;
  READWRITE 

я пытаюсь сбиться с NOT in перейдя на INNER JOIN и не получается...

ЗЫ База curSelectedPCs при этом пуста, ее структура аналогична PCs.

thx
Так ты делаешь совершенно разные запросы:
Первый: объединить таблицы по условию: curSelectedPCs.PCID = PCs.PCID , наложить фильтр NOT PCs.Archived и вывести в кусор поля <список полей>

Второй: из таблицы РCs иыбрать данные по условию: "PCs.PCID не встречается в наборе значений curSelectedPCs.PCID", наложить фильтр NOT PCs.Archived и вывести в кусор поля <список полей>

Кроме того, при пустой базе curSelectedPCs какой может быть набор записей по условию "curSelectedPCs.PCID = PCs.PCID"? Правильно - пустой! А по условию "PCs.PCID не встречается в наборе значений curSelectedPCs.PCID"? Правильно - весь файл PCs!

Надо правильно формулировать запросы...
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149296
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот от тебя-то я и ожидал ответа :)

получается что иннером такого эхвекту не добицца? т.е. в твоем примере в выборке остались тока те записи, которые были в обоих базах. типа аналог если бы было IN без NOT. т.е. в моем случае сработает тока NOT IN ?
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149316
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С
Так ты делаешь совершенно разные запросы:
Первый: объединить таблицы по условию: curSelectedPCs.PCID = PCs.PCID , наложить фильтр NOT PCs.Archived и вывести в кусор поля <список полей>

Второй: из таблицы РCs иыбрать данные по условию: "PCs.PCID не встречается в наборе значений curSelectedPCs.PCID", наложить фильтр NOT PCs.Archived и вывести в кусор поля <список полей>

Кроме того, при пустой базе curSelectedPCs какой может быть набор записей по условию "curSelectedPCs.PCID = PCs.PCID"? Правильно - пустой! А по условию "PCs.PCID не встречается в наборе значений curSelectedPCs.PCID"? Правильно - весь файл PCs!

Надо правильно формулировать запросы...сенксь - похоже до меня доходит по-маленьку :)
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149336
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добиться-то можно, только на скорость это никак не скажется. IN - проще и понятнее . Можно через EXISTS еще сделать. Если делать через JOIN, то это будет LEFT JOIN. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT ;
	PCs.PCID, ;
	PCs.PCName, ;
	PCs.ComputerID ;
FROM PCs ;
LEFT JOIN curSelectedPCs ON curSelectedPCs.PCID = PCs.PCID ;
WHERE ;
	PCs.Archived = .F. ;
	AND IsNull(curSelectedPCs.PCID) = .T. ;
INTO CURSOR curAddablePCs READWRITE

PS: А кто-то еще утверждал, что Select-SQL - это просто
...
Рейтинг: 0 / 0
почему select через in работает, а через inner join - нет?
    #34149562
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМДобиться-то можно, только на скорость это никак не скажется. IN - проще и понятнее . Можно через EXISTS еще сделать. Если делать через JOIN, то это будет LEFT JOIN. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT ;
	PCs.PCID, ;
	PCs.PCName, ;
	PCs.ComputerID ;
FROM PCs ;
LEFT JOIN curSelectedPCs ON curSelectedPCs.PCID = PCs.PCID ;
WHERE ;
	PCs.Archived = .F. ;
	AND IsNull(curSelectedPCs.PCID) = .T. ;
INTO CURSOR curAddablePCs READWRITE

PS: А кто-то еще утверждал, что Select-SQL - это просто даже не знаю кто такое мог утверждать :)
что до примера, приведенног Вами, то действительно мне этот IN как-то сразу по-душе пришелся и понятнее мне конструкция с ним, нежели оная из примера... а уж если такой гуру-лисовод утверждает что по скорости нет разницы - то и вовсе нет причин для беспокойств :)

Всем спасибо за ответы!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / почему select через in работает, а через inner join - нет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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