![]() |
![]() |
![]() |
|
Два запроса. Результаты равны? | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
Ненавижу 1С
гуру
14.12.11
✎
16:40
|
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) Абсолютно согласен про логичность и сложность реализации. Но то, что в справке присутствует фраза "сформированные РАЗНЫМИ запросами, заменяются одной" - ошибка, т.к. не соответствует действительности и вводит в заблуждение.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |