Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Как отобразить не свызанные записи в таблице   Найти похожие ветки 

 
сало-масло-колбаса   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.066 c
2-1271096606
Б
2010-04-12 22:23
2010.08.27
Как узнать, что в приложении течёт память?


2-1273090107
Dmutro
2010-05-06 00:08
2010.08.27
Delphi


15-1265622920
Alpi
2010-02-08 12:55
2010.08.27
Грубер - Понимание SQL, желательно fb2


2-1269207506
s_t_d
2010-03-22 00:38
2010.08.27
Не получается запись в таблицу с пом. FIBPlus


15-1264431625
dmk
2010-01-25 18:00
2010.08.27
Касперский ругается на форум