Имя: Пароль:
1C
1C 7.7
v7: найти отличия в таблицах SQL
,
0 monsterZE
 
20.12.13
16:05
собираю две таблички Т1 и Т2 с полями - ключ, свойство
Т1
А - 1
А - 2
А - 3
Б - 1

Т2
А - 1
А - 2
Б - 1

как выщемить эту А - 3 запись? =)
1 mikecool
 
20.12.13
16:07
объединить все, условие свойство есть нул
2 toypaul
 
гуру
20.12.13
16:08
select * from t1 where not exist (select * form t2 where t2.k=t.1 and t2.s=t1.s)
3 mikecool
 
20.12.13
16:11
(2) а если во второй больше записей?
4 toypaul
 
гуру
20.12.13
16:11
select * from t1 full join t2 on t1.k=t2.k and t1.s=t2.s
where t1.k is null or t2.k is null

это найдет разницу в 2х таблицах.
5 toypaul
 
гуру
20.12.13
16:12
(3) задачу надо формулировать точно. написано как "выщемить" конкретную запись в конкретной таблице.

если надо найти записи из обеих таблиц, то см (2)
6 Ёпрст
 
20.12.13
16:14
except не предлагать ?
:)
7 mikecool
 
20.12.13
16:14
(6) а что есть except?
8 mikecool
 
20.12.13
16:15
+7 тогда уж INTERSECT
9 MKZM
 
20.12.13
16:15
А 1с при чем? Неужели майдан и здесь?
10 Ёпрст
 
20.12.13
16:34
(8) ошибаешься.. ему не пересечение множества надо - а различие..
11 monsterZE
 
20.12.13
16:55
(10) угу, причем одна табличка в приоритете
(2) спасибо
вот такое нечто получилось
    |SELECT
    |     Т1.К as [Док $Документ.РасходнаяНал]
    |    ,Т1.С as [Склад $Справочник.СкладыТ]
    |FROM
    |    (
    |    SELECT DISTINCT
    |        ДокР.IDDoc as К
    |        ,$СпрТов.СкладТ as С
    |    FROM
    |         $Документ.РасходнаяНал as ДокР (NOLOCK)
    |    INNER JOIN
    |         _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокР.IDDoc
    |         AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |         AND Жур.Closed & 1 = 1
    |    INNER JOIN
    |        $ДокументСтроки.РасходнаяНал as ДокРСтр (NOLOCK) ON ДокРСтр.IDDoc = ДокР.IDDoc
    |    INNER JOIN
    |        $Справочник.Товары as СпрТов (NOLOCK) ON СпрТов.ID = $ДокРСтр.Товар
    |    WHERE
    |        $ДокР.ПризнакНакладной = $Перечисление.ПризнРасхНакл.Продажа
    |    ) as Т1
    |WHERE NOT EXISTS
    |    (
    |    SELECT
    |          Т2.К
    |        ,Т2.С
    |    FROM
    |        (
    |        SELECT
    |             $Спр.Док as К
    |            ,$Спр.Склад as С
    |        FROM  
    |            $Справочник.СтатОтгрузки as Спр (NOLOCK)
    |        WHERE  
    |            $Спр.ДатаДляОтбора BETWEEN :НачДата AND :КонДата
    |        ) as Т2
    |    WHERE Т2.К = Т1.К AND Т2.С = Т1.С
    |    )
12 Ёпрст
 
20.12.13
16:57
(11) и.. смысл от такиго количества присоединеяемых табличек, раз их нет ни в селекте, ни в условиях ?
13 Ёпрст
 
20.12.13
16:57
или это не весь запрос ?
14 monsterZE
 
20.12.13
16:58
т.е. должны выбраться документы не "отправленные на склад"
смысл присоединений добраться до склада товара
15 monsterZE
 
20.12.13
16:59
он свойство товара в тч документа не фигурирует
16 monsterZE
 
20.12.13
17:03
ну и я из первого запроса пару полей удалил.. =) пока переставлял их туда-сюда в джойнах
Основная теорема систематики: Новые системы плодят новые проблемы.