Имя: Пароль:
1C
1С v8
Помогите с запросом INNER JOIN
,
0 manyak
 
26.07.12
16:52
т1:
id,fld1,fld2
1,2,3
2,2,3
3,2,3

т2:
id,fld1,fld2
1,2,3
2,2,3
3,2,!1!
4,2,3

соединяю две таблички по ключевому полю

SELECT a.*,b.* FROM table1 as a, table2 as b where a.id=b.id
альтернативный аналог:
SELECT a.*,b.* FROM table1 as a INNER JOIN table2 as b on a.id=b.id

выводятся обе таблички соед. по ключевику a.id=b.id
1,2,3 1,2,3
2,2,3 2,2,3
3,2,3 3,2,!1!

потом хочу дополнительну выбрать только те записи - когда у них отличия в одном из полей (в данном случае fld2) ====3<>!1!====


SELECT a.*,b.* FROM table1 as a, table2 as b where a.id=b.id and a.fld2 <> b.fld2
альтернативный аналог:
SELECT a.*,b.* FROM table1 as a INNER JOIN table2 as b on a.id=b.id and a.fld2 <> b.fld2

так вот вторые запросы выдаю пустую выборку, хотя видно что отличия есть ====3<>!1!==== и должен быть след. результат:

3,2,3 3,2,!1!

почему не робят вторые запросы? как после соединения еще наложить доп условия когда у них различия есть в опр. нужном мне поле?
1 Нуф-Нуф
 
26.07.12
16:53
че, без решения этой задачи кредит на логан2 не дают?
2 manyak
 
26.07.12
16:55
эт не тот маньяк если что :)
3 manyak
 
26.07.12
16:55
не лысый :)
4 Ненавижу 1С
 
гуру
26.07.12
16:57
(3) не отмазывайся
5 manyak
 
26.07.12
16:59
подскажие, к вечеру мозги уже припухли :)
6 nerkadry
 
26.07.12
17:01
а если сделать второй иннер джойн с таблицей т2 по условию неравенства?
7 Ненавижу 1С
 
гуру
26.07.12
17:02
врешь ты все, а fld1 к чему в задаче? что-то не договариваешь
8 nerkadry
 
26.07.12
17:02
т.е. первый иннер по равенству id, второй иннер по неравенству a.fld2 <> b.fld2
9 Serginio1
 
26.07.12
17:03
SELECT a.*,b.* FROM table1 as a INNER JOIN table2 as b on a.id=b.id
where a.fld2 <> b.fld2
10 Ненавижу 1С
 
гуру
26.07.12
17:03
(9) а какая разница?
11 manyak
 
26.07.12
17:03
либо примерчик, есть две таблицы допустим:
Продажи_план (номенклатура, кол-во, прочие поля)
Продажи_факт (номенклатура, кол-во, прочие поля)
нужно соединить по номенклатуре и вывести где кол-во не совпадает
12 rs_trade
 
26.07.12
17:03
где то банальная ошибка. при таких данных и запросе, должна выдаваться строка 3,2,3 3,2,1
13 manyak
 
26.07.12
17:04
(8) да
14 spock
 
26.07.12
17:05
(12)+1
15 manyak
 
26.07.12
17:05
(12) делаю запрос ADO к двум листам из разных книг(файлов)
простое соединение выводит обе таблички видно различие в одном из полей, когда добавляю условие - типа второй иннер- выдает 0
16 manyak
 
26.07.12
17:08
эксель имеется ввиду.

SELECT a.*,b.* FROM [c:\Таблица_до.xls].[Запросы$] as a, [c:\Таблица_после.xls].[Запросы$] as b where a.[№]=b.[№] and a.[fld] <> b.[fld]


a.[fld] <> b.[fld] Различия есть - но не выдаются почему-то
17 acsent
 
26.07.12
17:10
косяк где-то в другом месте не в запросе
18 acsent
 
26.07.12
17:10
может где нулл затесался?
19 manyak
 
26.07.12
17:11

Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
dbConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\книга1.xls" & _
";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
Set Cn = New ADODB.Connection
Cn.Open dbConnectionString
Set Rs = New ADODB.Recordset
With Rs
       .ActiveConnection = Cn
       .CursorType = adOpenStatic
       .CursorLocation = adUseClient
       .LockType = adLockOptimistic
End With
запрос="SELECT a.*,b.* FROM [c:\Таблица_до.xls].[Запросы$] as a, [c:\Таблица_после.xls].[Запросы$] as b where a.[№]=b.[№] and a.[fld] <> b.[fld]"
Rs.Open запрос
20 rs_trade
 
26.07.12
17:12
(16) может имена полей fld не катят? берет какие нить две левые пустые ячейки.
21 manyak
 
26.07.12
17:20
раз синтаксис правильный - бум ковырять дальше
22 nerkadry
 
26.07.12
17:22
(21) чем тебя (9) не устраивает
23 vinogradъ
 
26.07.12
17:25
(19) если с join-ом и where переписАть?
24 manyak
 
26.07.12
17:28
(22)
SELECT * FROM [c:\Таблица_до.xls].[Запросы$] as a INNER JOIN [c:\Таблица_после.xls].[Запросы$] as b ON b.[№]=a.[№] where b.[ZZZZ] <> a.[ZZZZ]

тож ноль записей выводит, пробывал
25 manyak
 
26.07.12
17:31
беру один файл "после", удаляю в столбце ZZZZ  в одной ячейке значение - делаю отличия, сохраняю его как файл "до" - делаю запрос - в выборке 0 записей
26 manyak
 
26.07.12
17:42
ZZZZ
2
3
4
5

ZZZZ
2
3
xb
5
результат не дает, в выборке 0, отличие 4<>xb
ZZZZ
2
3
4
5

ZZZZ
2
3
4444
5
результат есть, 4<>4444
т.е. не хочет сравнивать если типы разные, почему? т.е. тип общий с числовым не сравнивает, как то преобразовать все в тексту может попробывать
27 manyak
 
26.07.12
17:43
у столбца ZZZZ у всех ячеек в обоих вариантах тип "Общий" стоит
28 manyak
 
26.07.12
17:44
дровишки ADO не робят получается как надо?
29 Serginio1
 
26.07.12
17:51
Это скорее не к АДО нужни притензии а к IMEX=1 когда в ячейке может быть что угодно. Это не соотносится с БД, где поля типизированны. Кстати для интереса сделай запрос с IMEX=0
30 manyak
 
26.07.12
17:53
пробывал, не помогает, нам же однозначно IMX=1 чтоб как текст все распознавал
31 Serginio1
 
26.07.12
18:06
Ну тогда и сравнивай в рукопашную либо типизируй колонки
32 hhhh
 
26.07.12
18:06
(30) может как-то: NOT ( b.[ZZZZ] = a.[ZZZZ])
33 manyak
 
26.07.12
18:09
(31) так и придется, просто хотелось красиво решить задачу
(32) попробуем
Независимо от того, куда вы едете — это в гору и против ветра!