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