Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.079 c
2-1274950789
dalex
2010-05-27 12:59
2010.08.27
Tframe


15-1267122258
Fenik
2010-02-25 21:24
2010.08.27
YAML под Delphi


2-1266055243
V
2010-02-13 13:00
2010.08.27
Объявление массива


2-1268723049
b/@.
2010-03-16 10:04
2010.08.27
Картинки стандартных акций


15-1275424180
Юрий
2010-06-02 00:29
2010.08.27
С днем рождения ! 2 июня 2010 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский