Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите по IN () в SELECT SQL / 6 сообщений из 6, страница 1 из 1
21.03.2007, 12:56
    #34405525
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
Привет!

У меня конструкция условия в SELECT SQL такая:
Код: plaintext
1.
2.
   WHERE Cases.CaseID NOT IN (SELECT CaseID FROM CasesDecisions) ;
     AND Cases.CaseID NOT IN (SELECT CaseID FROM CasesDecisionsValid) ;
Это нельзя ли заменить как-то одним SELECT-ом? Что-то типа
Код: plaintext
WHERE Cases.CaseID NOT IN (SELECT DISTINCT CaseID FROM CasesDecisions,CasesDecisionsValid) ;

сенксь

вфп9
...
Рейтинг: 0 / 0
21.03.2007, 13:00
    #34405544
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
А самому по-пробовать?
...
Рейтинг: 0 / 0
21.03.2007, 13:05
    #34405562
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
пробовал,
Код: plaintext
WHERE Cases.CaseID NOT IN (SELECT DISTINCT CaseID FROM CasesDecisions,CasesDecisionsValid)
не работает - ошибка, укажите поле уникально :(. Можно, конечно в два разных столбца выбрать (CaseID1, CaseID2), но какже тода DISTINCT и вообще, будет ли IN обрабатывать оба столбца?
...
Рейтинг: 0 / 0
21.03.2007, 13:08
    #34405579
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
Ну типа такого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create cursor test (f1 int)

CREATE CURSOR CasesDecisions (f1 int)

CREATE CURSOR CasesDecisionsValid (f1 int)

INSERT INTO test VALUES ( 1 )
INSERT INTO test VALUES ( 2 )
INSERT INTO test VALUES ( 3 )
INSERT INTO test VALUES ( 4 )

INSERT INTO CasesDecisions VALUES ( 2 )

INSERT INTO CasesDecisionsValid VALUES ( 3 )

SELECT * FROM test WHERE ;
f1 NOT in (SELECT IIF(ISNULL(a.f1), b.f1, a.f1) as f1 ;
FROM CasesDecisions a FULL JOIN CasesDecisionsValid b ON a.f1 = b.f1) 
...
Рейтинг: 0 / 0
21.03.2007, 13:54
    #34405793
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
я бы подзапрос в IN
написал бы так

Код: plaintext
1.
2.
3.
SELECT DISTINCT CaseID FROM CasesDecisions
union 
SELECT CaseID FROM CasesDecisionsValid
или даже
Код: plaintext
1.
2.
SELECT  CaseID FROM CasesDecisions 
union all
SELECT CaseID FROM CasesDecisionsValid

Нужно смотреть на стоимость устранения дубликатов в подзапросе против стоимости поиска в этом самом подзапросе.
Все зависит от количества записей и наличия индексов.
Т.е в принципе нужно поиграться с оптимизацией этого запроса

кстати при наличии индексов по CaseID в таблицах CasesDecisions CasesDecisionsValid
ваш вариант из 2 in может быть и быстрее.

Ну и еще можно с EXISTS поиграться

Или еще вариант - сделать сначала курсор из CasesDecisions + CasesDecisionsValid
а потом его INNER JOIN с таблицей
...
Рейтинг: 0 / 0
22.03.2007, 12:30
    #34408317
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по IN () в SELECT SQL
Спасибки, похоже оставить два IN() будет нормальным решением, впрочем и по объеденению 2х запросов в один тоже все понятно!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите по IN () в SELECT SQL / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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