![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отобразить не свызанные записи в таблице
сало-масло-колбаса © (2010-02-10 22:44:00)Есть две таблицы связанные меж собой:
1. в первой информация о изделии
2. информация о дефектах изделия
во вторую таблицу записи добавляются, только когда у изделия из первой таблице есть дефект.
в первой таблице, допустим, уже 100 записей и они не имеют дефектов,
то при такой связи SELECT Tovar.Name, Тypes.TypeName FROM Tovars, Types, Defects WHERE Tovar.types=Types.ID AND Defects.Link=Tovar.ID
Ни одна запись не отображается, ну это то и понятно потому, что нет ни одной запись о дефектах, а задача в том и заключается, что бы отобразить все записи товара у которых нет дефектов.
Подскажите как это сделать?
сало-масло-колбаса (2010-02-14 13:45:00) [1]
> sniknik © (14.02.10 13:24) [15]
> все что я знаю по ADO/Jet все оттуда...
А, вот теперь то и понятно, что ты ничего не знаешь... так бы сразу и говорил, а не парил мозги людям.
А в качестве доказательства вот тебе же и пример из глючной справки мелкомяхких:
В следующем примере показано, как можно объединить таблицы «Типы» и «Товары» по полю «КодТипа». Результат запроса представляет собой список типов, включая те, которые не содержат товаров.
SELECT Тип
Марка
FROM Типы LEFT JOIN Товары
ON Типы.КодТипа = Товары.КодТипа
В этом примере поле «КодТипа» является связующим полем, которое не включено в результат выборки по запросу, так как не включено в инструкцию SELECT. Чтобы включить связующее поле в результат выборки, укажите имя поля в инструкции SELECT— в данном случае имя поля будет выглядеть как Типы.КодТипа.
И так видно, что здесь описано только один классический пример объединение по одному полю из двух таблиц, а мне нужно объединение записей из многих таблиц одновременно и полей около 10, и как же я узнаю, если такие справки даунами пишутся?
sniknik (2010-02-14 13:24:00) [2]> Прежде чем так отвечать, ты бы сам туда глянул.
все что я знаю по ADO/Jet все оттуда... в основном. единственное сам аксесс (программу) я не использую, предпочитаю файлы справки открывать стандартным виндовым просмотрщиком.
"дружелюбный" аксесс лезет куда его не просят (в инет), в разных местах дает разное (контекстная справка), чаще всего не то что мне нужно, в итоге не удобно. но это не значит что там ничего нет.
> Сразу видно, что ты не в тему ляпнул. Да все знают, что с правке MS Ассess мышь повесилась
сразу видно, даже не пытался...
сало-масло-колбаса (2010-02-14 13:04:00) [3]
> sniknik © (13.02.10 21:01) [10]
> > что то мало примеров и описаний нашел.в справке аксесса
> смотрел?> Вот так точно ничего не получается:> Пишет ошибка
> синтаксиса в выражении "JOIN"синтаксис аксесса "слегка"
> отличается от "классики".
Прежде чем так отвечать, ты бы сам туда глянул. Сразу видно, что ты не в тему ляпнул. Да все знают, что с правке MS Ассess мышь повесилась
Плохиш (2010-02-14 00:53:00) [4]
> SELECT Tovar.Name,Types.TypeName, Defects.Defect
> FROM Tovar LEFT JOIN Types ON Tovar.TypeLink=Type.ID Tovar
> LEFT JOIN Defects ON Defects.Link=Tovar.ID
>
Это, что за галиматья?
Anatoly Podgoretsky (2010-02-13 21:38:00) [5]> sniknik (13.02.2010 21:01:10) [10]
Слегка это мягко сказано.
sniknik (2010-02-13 21:03:00) [6]> "слегка" отличается
зато у него есть вполне приличный "мастер построитель" запросов...
sniknik (2010-02-13 21:01:00) [7]> что то мало примеров и описаний нашел.
в справке аксесса смотрел?
> Вот так точно ничего не получается:
> Пишет ошибка синтаксиса в выражении "JOIN"
синтаксис аксесса "слегка" отличается от "классики".
сало-масло-колбаса (2010-02-13 19:38:00) [8]
> 12 © (12.02.10 11:01) [4]
</I
> Вариант (12.02.10 13:01) [6]
>
Эти способы то же неплохие и работают, но мне все-таки хочется разобраться со способом "LEFT JOIN"
Как из двух таблиц по одному полю объединить разобрался
SELECT Tovar.Name, Defects.Defect
FROM Tovar LEFT JOIN Defects ON Defects.Link=Tovar.ID
- так все работае
А как теперь множество полей из объединить пока не разобрался, что то мало примеров и описаний нашел.
Вот так точно ничего не получается:
SELECT Tovar.Name,Types.TypeName, Defects.Defect
FROM Tovar LEFT JOIN Types ON Tovar.TypeLink=Type.ID Tovar LEFT JOIN Defects ON Defects.Link=Tovar.ID
Пишет ошибка синтаксиса в выражении "JOIN"
Плохиш (2010-02-12 18:12:00) [9]
> сало-масло-колбаса (12.02.10 10:51) [3]
> А вообще синтксис "LIFT JOIN" поддерживается в ADO Access
> локальных базах?
То, что тебе подсказали - поддерживается, то, что ты пишешь - не поддерживается.
Anatoly Podgoretsky (2010-02-12 16:06:00) [10]
> А вообще синтксис "LIFT JOIN" поддерживается в ADO Access
> локальных базах?
> Как не пытался как только не пробовал все ошибки выдает
> "Ошибка сиснтаксиса".
Поддерживается, только видимо ты неправильно пишешь.
Вариант (2010-02-12 13:01:00) [11]
> сало-масло-колбаса (10.02.10 22:44)
Еще вариант навскидку -
SELECT Tovar.Name, Тypes.TypeName FROM Tovars where
WHERE Tovar.types=Types.ID and
not EXISTS
(select Defects.Link from Defects where Defects.Link=Tovar.ID)
Sergey13 (2010-02-12 11:19:00) [12]> [3] сало-масло-колбаса (12.02.10 10:51)
> "LIFT JOIN"
L EFT - это лево, а не подъемный механизм.
12 (2010-02-12 11:01:00) [13]join должно по-моему работать,
а можно еще так попробовать
SELECT
Tovar.Name, Тypes.TypeName
FROM
Tovars, Types, Defects
WHERE
Tovar.types=Types.ID
and
Tovar.ID not in
(
SELECT
Tovar.ID
FROM
Tovars, Types, Defects
WHERE
Tovar.types=Types.ID AND Defects.Link=Tovar.ID
)
сало-масло-колбаса (2010-02-12 10:51:00) [14]
> fford (10.02.10 22:48) [1]
>
> Anatoly Podgoretsky © (10.02.10 23:02) [2]
А вообще синтксис "LIFT JOIN" поддерживается в ADO Access локальных базах?
Как не пытался как только не пробовал все ошибки выдает "Ошибка сиснтаксиса".
Anatoly Podgoretsky (2010-02-10 23:02:00) [15]> сало-масло-колбаса (10.02.2010 22:44:00) [0]
Сделать явное LEFT соединение
fford (2010-02-10 22:48:00) [16]SELECT Tovar.Name, Тypes.TypeName FROM Tovars left join Types on Tovar.types=Types.ID left join Defects on Defects.Link=Tovar.ID
если записей в подчиненных таблицах нет то вместо их данных будет значение null