Имя: Пароль:
1C
 
Как 2 таблицы запроса объединить так, чтобы из одной исключить записи друго
0 gr13
 
21.06.07
15:02
собственно, есть 2 таблицы запроса, как правильно объединить их так (в запросе), чтобы из таблицы 1 исключить все записи присутствующие в таблице 2?
1 Terv
 
21.06.07
15:02
Левым соединением и условие в ГДЕ , НЕ ЕСТЬ NULL
2 Лефмихалыч
 
21.06.07
15:03
(0) подумай еще раз, что ты делать собрался - запросом можно только ВЫБРАТЬ данные, но не исключить
3 pajaro
 
21.06.07
15:04
ВЫБРАТЬ
...
ИЗ Таблица1
ЛЕВОЕ СОЕДИНЕНИЕ Таблица2
ПО Таблица1.Ключ = Таблица2.Ключ
ГДЕ
Таблица2.Ключ ЕСТЬ NULL
4 Лефмихалыч
 
21.06.07
15:04
+(2) что на выходе-то надо, я вот чего понять не могу
5 Лефмихалыч
 
21.06.07
15:07
я б сказал, что это полное внешнее соединение:

"ВЫБРАТЬ
|  ...
|Из
|   Таблица1
|ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Таблица2
|ПО
|   Таблица1.Ключ <> Таблица2.Ключ
|"

этот запрос вернет все несовпадающие записи из двух таблиц
6 gr13
 
21.06.07
15:19
есть таблица 1 с записями 1,2,3,4,5,6
есть таблица 2 с записями 3,4,5
результирующая таблица 1,2,6
7 gr13
 
21.06.07
15:19
(5) меня не интересуют вообще не совпадающие записи второй таблицы
8 Terv
 
21.06.07
15:20
(6) см. (1)
9 gr13
 
21.06.07
15:25
(8) не понял(
10 Terv
 
21.06.07
15:27
(9)

ВЫБРАТЬ
...
ИЗ Таблица1

ЛЕВОЕ СОЕДИНЕНИЕ Таблица2

ПО Таблица1.Ключ = Таблица2.Ключ

ГДЕ
(НЕ Таблица2.Ключ ЕСТЬ NULL)
11 Лефмихалыч
 
21.06.07
15:28
(7) это значит, что СОЕДИНЕНИЕ использовать нельзя. Например, используй вложенный запрос и оператор "В"
12 Terv
 
21.06.07
15:28
+(10) хм... ошибся... в (3) правильно
13 selenat
 
21.06.07
15:29
(10) НЕ - лишнее...
14 selenat
 
21.06.07
15:30
Левыч, ИМХО ты все время не в теме...
15 gr13
 
21.06.07
15:33
пасибо) сделал другим запросом передал  в СЗ
16 Лефмихалыч
 
21.06.07
15:34
(14) неверное твое мнение
17 Terv
 
21.06.07
15:35
(16) верное, верное
18 Лефмихалыч
 
21.06.07
15:39
(14,17) шли бы вы оба свое мнение в утесах ныкать. Соединение нужно для выбора комбинаций записей из ВСЕХ источников. Таким образом, если нам надо выбрать данные только из одного источника, то это не соединение. Единственное в чем я ошибся - в (11) "нельзя" надо замнить на "не стоит"
19 gr13
 
21.06.07
15:41
(10) а разве тогда не попадут все записи из первого запроса?
20 selenat
 
21.06.07
15:42
(19) проверь. :)
21 Terv
 
21.06.07
15:43
(19) только надо писать
ГДЕ
Таблица2.Ключ ЕСТЬ NULL

см.(12) (13) (3)
22 Михей
 
21.06.07
15:45
ВЫБРАТЬ
Таблица1.Ключ
ИЗ Таблица1

ГДЕ
Таблица1.Ключ НЕ В (
                    ВЫБРАТЬ
                       Таблица2.Ключ
                    ИЗ
                       Таблица2)
23 gr13
 
21.06.07
16:07
(10) без НЕ работает, хотя я и не огрокал пока логику до конца(
24 PR
 
21.06.07
16:08
(2) Правда что ли? :))
25 selenat
 
21.06.07
16:11
(23) да все вроде прозрачно. Если во второй табл. нет соответствующих записей, то имеем в этом поле NULL  и отсеиваем эти записи с NULL при помощи ГДЕ. Ты лучше сравни этот вариант по скорости с (22)...
26 Freest
 
21.06.07
16:25
(3) почти в 2 раза быстрее (22)
27 selenat
 
21.06.07
16:30
(26) не удивительно. Насчет в 2 раза - думаю, это зависит от объема выборки...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn