вопрос по выборке

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

вопрос по выборке

Сообщение Sirik » 08.08.2006 (Вт) 14:11

есть 2 таблицы: t1 и t2
в t1 такие поля: code (цифровой код), name (текстовое поле)
в t2 такие поля: code2 (цифровой код), name2 (текстовое поле)

надо организовать запрос, который выбирает данные из t1 (критерий выборки я делаю сам), который:
а) выбирает засиси из таблицы t1
б) сортирует выборку по альфовиту, вот тут вот интересно: цифровой код code отвечает коду code2, а сортировать надо по name2

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.08.2006 (Вт) 14:17

Делаешь left join t2 on t2.Code2=t1.code order by name2
Надеюсь тебе не нужно редактировать t1? :)
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 08.08.2006 (Вт) 14:35

блин, у меня проблеммы с синтаксисом:
можешь полностью написать?

зы. вот такой у меня раньше был запрос: SELECT * FROM [tbl_LineWeigth] ORDER BY [ID] ;

естественно что надо поменять часть та что справа от ORDER BY

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.08.2006 (Вт) 14:55

Код: Выделить всё
select t1.*, t2.name2 left join t2 on t2.Code2=t1.code order by name2
name2 выбирается потому что только в этом случае можно сделать по ней сортировку. Или это справедливо только для вьюшек? Не помню.
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 08.08.2006 (Вт) 15:27

ошибка:
SELECT tbl_LineWeigth.*,tbl_Line.Name LEFT JOIN tbl_Line ON tbl_Line.ID=tbl_LineWeigth.ID_Line ORDER BY tbl_Line.Name ;

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.08.2006 (Вт) 15:38

Какая?
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 08.08.2006 (Вт) 15:44

ошибка синтаксиса: пропущен оператор

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.08.2006 (Вт) 15:49

from tbl_LineWeigth забыл. Мой косяк. :oops:
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 08.08.2006 (Вт) 15:51

м-да, глупо получмлось, но
опять ошибка: вот конечная строка:
SELECT FROM tbl_LineWeigth.* , tbl_Line.Name LEFT JOIN tbl_Line ON tbl_Line.ID=tbl_LineWeigth.ID_Line ORDER BY tbl_Line.Name ;

ошибка: ошибочное или пропущенное зарезирвированное слово или аргумент в конструкции SELECT или неверная путуация

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.08.2006 (Вт) 15:54

FROM :lol:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.08.2006 (Вт) 15:56

Код: Выделить всё
SELECT
    tbl_LineWeigth.*,
    tbl_Line.Name   
FROM
       tbl_LineWeigth LEFT JOIN tbl_Line ON
       tbl_Line.ID=tbl_LineWeigth.ID_Line
ORDER BY tbl_Line.Name

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 08.08.2006 (Вт) 16:01

это ж надо было так лопухнуться... спасибо, всё работает

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 02.10.2006 (Пн) 12:18

извеняюсь что подымаю данную тему потому, что:
если надо уделать такое же, но таблицы находяться в разных базах данных?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 02.10.2006 (Пн) 14:32

Если Access, то Файл - Внешние данные - Связь с таблицами.
Если MSSQL - select database.dbo.table.*
Или даже select server.database.dbo.table.*
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 02.10.2006 (Пн) 15:15

access, я не могу использовать внешние данные, так как у меня свзять не постоянная:
время от времени перелинковую базы

может программным путём как-то можно?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.10.2006 (Пн) 20:39

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 03.10.2006 (Вт) 0:00

Sirik писал(а):access, я не могу использовать внешние данные, так как у меня свзять не постоянная:
время от времени перелинковую базы

может программным путём как-то можно?

У тебя есть три варианта:
1. Указывать имя внешней базы непосредственно в SQL-запросе.
Код: Выделить всё
SELECT T1.Field1, T1.Field2 FROM Table1 as T1 IN 'С:\db2.mdb'

2. Программно прилинковывать таблицы следующей ф-ией:
Код: Выделить всё
Public Function LinkJetTable(sDestPath As String, sDestPWD As String, sLinkTblAs As String, sSourcePath As String, sSourcePWD As String, sLinkTbl As String) As Boolean
'Прилинковка таблицы из другой базы Access
    'sDestPath, sDestPWD - путь и пароль к базе, в которую нужно прилинковать табл.
    'sLinkTblAs - под каким именем прилинковывать таблицу
    'sSourcePath, sSourcePWD - путь и пароль к базе, в которой находится подсоединяемая табл.
    'sLinkTbl - имя таблицы в этой базе
    Dim cat As New ADOX.Catalog
    Dim tbl As New ADOX.Table
    On Error Resume Next
   ' Open the catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & sDestPath & ";Jet OLEDB:Database Password=" & sDestPWD
    If Err.Number <> 0 Then Exit Function
    ' Set the name and target catalog for the table
    tbl.Name = sLinkTblAs
    Set tbl.ParentCatalog = cat
    ' Set the properties to create the link
    tbl.Properties("Jet OLEDB:Create Link") = True
    tbl.Properties("Jet OLEDB:Link Datasource") = sSourcePath
    tbl.Properties("Jet OLEDB:Link Provider String") = ";Pwd=" & sSourcePWD & ";"
    tbl.Properties("Jet OLEDB:Remote Table Name") = sLinkTbl
    ' Append the table to the collection
    cat.Tables.Append tbl
    If Err.Number = 0 Then LinkJetTable = True
    Set tbl = Nothing
    Set cat = Nothing
End Function

3. Воспользоваться статьей, которую рекомендует GSerg :) (хотя это почти равносильно 2-ому варианту)
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList