Имя: Пароль:
IT
 
Два запроса. Результаты равны?
0 Ненавижу 1С
 
гуру
14.12.11
16:40
1. Могут быть не равны 67% (6)
2. Всегда будут равны 33% (3)
3. Никогда не будут равны 0% (0)
Всего мнений: 9

1.
ВЫБРАТЬ
   А.ПА КАК ПА,
   Б.ПБ КАК ПБ
ИЗ
   А КАК А
       ПОЛНОЕ СОЕДИНЕНИЕ Б КАК Б
       ПО А.ПА = Б.ПБ

УПОРЯДОЧИТЬ ПО
   ПА,
   ПБ

2.
ВЫБРАТЬ
   А.ПА КАК ПА,
   Б.ПБ КАК ПБ
ИЗ
   А КАК А
       ЛЕВОЕ СОЕДИНЕНИЕ Б КАК Б
       ПО А.ПА = Б.ПБ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   А.ПА,
   Б.ПБ
ИЗ
   Б КАК Б
       ЛЕВОЕ СОЕДИНЕНИЕ А КАК А
       ПО (А.ПА = Б.ПБ)

УПОРЯДОЧИТЬ ПО
   ПА,
   ПБ
1 Happy Bear
 
14.12.11
16:45
У нас сегодня пьянка, не до твоих запросов ;)

Могут быть не равны
2 Beduin
 
14.12.11
16:51
Я еще не пил.

Всегда будут равны
3 andrewks
 
14.12.11
16:52
по логике, должно быть так:

Всегда будут равны
4 Beduin
 
14.12.11
16:54
Не. Хотя в первом запросе в некоторых ситуациях записей будет меньше.
5 Ненавижу 1С
 
гуру
14.12.11
16:55
(4) почему?
6 andrewks
 
14.12.11
16:56
(4) это почему?
7 andrewks
 
14.12.11
16:57
а, кажись, вкурил. собака порылась в ОБЪЕДИНИТЬ

случай с одинаковыми записями
8 Ненавижу 1С
 
гуру
14.12.11
16:58
(7) собака то порылась...
9 Beduin
 
14.12.11
16:58
(5) При совпадении условий строчки объединятся.
А во втором тупо объединение двух таблиц.
10 andrewks
 
14.12.11
16:59
(4) только наоборот, больше
11 Ненавижу 1С
 
гуру
14.12.11
17:00
(9) но у меня как бы наоборот, во втором записей меньше
12 andrewks
 
14.12.11
17:01
(11) вполне логично. делай ОБЪЕДИНИТЬ ВСЕ
13 Ненавижу 1С
 
гуру
14.12.11
17:01
(12) будет совсем плохо
14 andrewks
 
14.12.11
17:02
(13) да, согласен. не совсем, но тоже плохо
15 andrewks
 
14.12.11
17:03
(13) сопсна, на то тебе и дали четыре разных джойна :)
16 Ненавижу 1С
 
гуру
14.12.11
17:04
(15) три! правое это тоже что и левое, только правое ))
17 andrewks
 
14.12.11
17:04
получается, так:

Могут быть не равны
18 andrewks
 
14.12.11
17:04
(16) cross join aka ,
19 Beduin
 
14.12.11
17:04
А ну да, во втором у тебя только совпадающие соединяются.
20 Ненавижу 1С
 
гуру
14.12.11
17:05
(18) где оно в 1С?
(19) тема в NULL
21 rs_trade
 
14.12.11
17:05
А чего надо то изначально?

Могут быть не равны
22 andrewks
 
14.12.11
17:05
(16) логически - да. но не всегда удобно
23 Ненавижу 1С
 
гуру
14.12.11
17:05
(21) кому?
24 Beduin
 
14.12.11
17:06
Надо в первом запросе ВНУТРЕННЕЕ СОЕДИНЕНИЕ использовать. Тогда будут равны.
25 andrewks
 
14.12.11
17:06
(20) 1.зри после aka
26 andrewks
 
14.12.11
17:06
(24) зачётно пошутил
27 Ненавижу 1С
 
гуру
14.12.11
17:06
(25) фигня, это INNER JOIN ... ON TRUE
28 Beduin
 
14.12.11
17:08
(20) NULL это такие же данные.
А что надо то, действительно?
29 Ненавижу 1С
 
гуру
14.12.11
17:09
(28) мне - пока ничего
30 andrewks
 
14.12.11
17:10
(27) ну, на тебя не угодишь. это не то, то не сё.

пользуйся, раз дали, и не кипешуй! :)

ЗЫ подмоги разобраться с v8: СокрЛП в Запросе
31 Happy Bear
 
14.12.11
17:17
Будут равны, если в А и Б нет одинаковых данных, иначе в варианте №2 будет задвоение одинаковых записей, а в варианте №1 не будет.
32 Beduin
 
14.12.11
17:19
(31) По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные разными запросами, заменяются одной.
33 andrewks
 
14.12.11
17:19
(31) после "иначе" наоборот
34 Happy Bear
 
14.12.11
17:20
перепутал с "ОБЪЕДИНИТЬ ВСЕ" ;)
35 Beduin
 
14.12.11
17:21
В общем подитожу.
Отличия между запросами в том, что в первом помимо совпадающих записей включаются еще и не совпадающие.
36 Ёпрст
 
гуру
14.12.11
17:21

Могут быть не равны
37 Ёпрст
 
гуру
14.12.11
17:22
+36 второй запрос вообще всегда больше записей даст
38 Ёпрст
 
гуру
14.12.11
17:23
+37 а , хотя нет, у тебя же юнион без all..
39 Fragster
 
гуру
14.12.11
17:24
если записи дублируются, то второй вернет меньше.

Могут быть не равны
40 Beduin
 
14.12.11
17:25
(38) Угу. И там где образуется NULL слева или справа, то они во втором не соединятся и выкинутся из результата.
41 fisher
 
14.12.11
17:28
Если в первом запросе написать ВЫБРАТЬ РАЗЛИЧНЫЕ, тогда по-идее должны быть равны всегда...

Могут быть не равны
42 Fragster
 
гуру
14.12.11
17:28
(41) нифига
43 acsent
 
14.12.11
17:30
NULLы в значениях есть?
44 andrewks
 
14.12.11
17:37
(43) а как это может сказаться на ответе?
45 fisher
 
14.12.11
17:37
(42) Ммм?
46 Fragster
 
гуру
14.12.11
17:41
(45) если в Б две одинаковые записи, которые соединяться с А (т.е. в первой части запроса будут две одинаковые строки), то ОБЪЕДИНИТЬ их разве схлопнет?
47 Beduin
 
14.12.11
17:43
(46) Получится четыре одинаковые строки, которые схлопнуться в одну.
48 acsent
 
14.12.11
17:43
Если в 1 запросе написать различные, то тогда эти запросы будут идентичны
49 fisher
 
14.12.11
17:44
(46) Сначала кажись ОБЪЕДИНИТЬ ВСЕ отрабатывает, а потом тупо в получившемся результате дубли режутся.
50 Beduin
 
14.12.11
17:45
(48) Нет. В первом еще присутствуют записи которые не совпадают.
51 andrewks
 
14.12.11
19:52
(50) чего-чего?
52 ПесняПроЗайцев
 
14.12.11
20:35
Пожалуй, подниму заднюю ногу, помечу.
53 Ненавижу 1С
 
гуру
15.12.11
09:49
ИМХО, для равенства результатов должны выполняться оба условия:
1. не уникальные NOT-NULL значения одной таблицы не должны встречаться в другой
2. NULL-значения должны встречаться не более чем в одной таблице
54 fisher
 
15.12.11
11:28
(53) ИМХО, пофиг на NULL. Если в первом запросе РАЗЛИЧНЫЕ поставить - должны быть одинаковые результаты.
55 RomanYS
 
15.12.11
23:36
(54) Из справки 1С:
" при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной."
А предложение РАЗЛИЧНЫЕ по сути удалит все одинаковые строки,что эквивалентно удалению одинаковых строк из исходных таблиц.
56 RomanYS
 
15.12.11
23:40
(53) Если каждая из таблиц, например, состоит из 2-х NULL, то в результате обоих запросов мы должны получить 4 пары NULL-NULL

Всегда будут равны
57 fisher
 
16.12.11
12:13
(55) Домашнее задание:

ВЫБРАТЬ
   TABLE1.FIELD
ИЗ
   (ВЫБРАТЬ
       1 КАК FIELD
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       1) КАК TABLE1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   TABLE2.FIELD
ИЗ
   (ВЫБРАТЬ
       2 КАК FIELD
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       2) КАК TABLE
58 fisher
 
16.12.11
12:16
В последней строчке двойка съелась.
      2) КАК TABLE2
59 RomanYS
 
16.12.11
13:55
(57) Спасибо, лень было самому проверять.
По факту получается ОБЪЕДИНИТЬ выбирает только различные строки, независимо от того, к какой таблице они изначально относились.
На мой взгляд это несоответствие документации, или, наоборот, ошибка в справке.
60 fisher
 
16.12.11
14:36
(59) Не за что. Это не заняло моего времени :)
В справке нет ошибки. Есть неполнота. Ведь все одинаковые строки сформированные разными запросами в самом деле будут заменены одной :)
Фича на самом деле вполне логичная. Ведь если немного подумать, то альтернативная реализация окажется заметно более сложной.
61 RomanYS
 
16.12.11
15:42
(60) Абсолютно согласен про логичность и сложность реализации. Но то, что в справке присутствует фраза "сформированные РАЗНЫМИ запросами, заменяются одной" - ошибка, т.к. не соответствует действительности и вводит в заблуждение.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн