Как использовать внутреннее соединение sql критериев двух столбцов из одной таблицы в базе данных доступа MS

Я пытаюсь использовать внутреннее объединение sql критериев двух столбцов из одной таблицы в базе данных доступа MS, и мне нужен только один запрос sql.

Пожалуйста, направь меня

Спасибо

SELECT PERSON.IDPERSON, MASTERPERSON.PERSONNAME, PERSON.[DATE], MASTERPERSON.LOCATION, FORMAT(PERSON.DATE,'dddd') AS DAYS
FROM PERSON INNER JOIN MASTERPERSON ON PERSON.IDPERSON = MASTERPERSON.IDPERSON;

Результат из Sql выше:

ИДПЕРСОН ИМЯ ЧЕЛОВЕКА ДАТА РАСПОЛОЖЕНИЕ ДНИ 1000 Рей 29-24 мая А Среда 1000 Рей 30-мая-24 А Четверг 1001 Майкл 29-24 мая Б Среда 1001 Майкл 30-мая-24 Б Четверг

Стол PERSON

ИДПЕРСОН ДАТА 1000 29-24 мая 1000 30-мая-24 1001 29-24 мая 1001 30-мая-24

Стол MASTERPERSON

ИДПЕРСОН ИМЯ ЧЕЛОВЕКА РАСПОЛОЖЕНИЕ 1000 Рей А 1001 Майкл Б

Стол PERSONDAYS

РАСПОЛОЖЕНИЕ ДНИ ПОЛОЖЕНИЕ ДЕЛ А Среда А10 А Четверг А27 Б Среда Б18 Б Четверг Б29

Желаемый результат

ИДПЕРСОН ИМЯ ЧЕЛОВЕКА ДАТА РАСПОЛОЖЕНИЕ ДНИ ПОЛОЖЕНИЕ ДЕЛ 1000 Рей 29-24 мая А Среда А10 1000 Рей 30-мая-24 А Четверг А27 1001 Майкл 29-24 мая Б Среда Б18 1001 Майкл 30-мая-24 Б Четверг Б29

Похоже, вам просто нужно еще раз присоединиться JOIN PERSONDAYS AS pd ON pd.LOCATION = MASTERPERSON.LOCATION AND pd.DAYS = FORMAT(PERSON.DATE, 'dddd')

Charlieface 29.05.2024 12:35
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, нужен еще один JOIN для включения таблицы PersonDays. Это потребует составного JOIN в полях «Местоположение» и «Дата/Дни». Access требователен к использованию круглых скобок с несколькими предложениями JOIN. Используйте конструктор запросов, чтобы получить правильный синтаксис.

В вашем случае необходимо вычислить название дня из значения даты для ПРИСОЕДИНЕНИЯ к названиям дней. К сожалению, невозможно ПРИСОЕДИНИТЬСЯ напрямую к расчетному значению в представлении дизайна. Можно переключиться на представление SQL, чтобы добавить это дополнительное ПРИСОЕДИНЕНИЕ AND PersonDays.DAYS = FORMAT(PERSON.DATE, 'dddd'), но тогда его невозможно открыть в представлении дизайна.

SELECT Person.IDPerson, MasterPerson.PersonName, Person.Date, MasterPerson.Location, PersonDays.Days, PersonDays.Status
FROM PersonDays INNER JOIN (Person INNER JOIN MasterPerson 
ON Person.IDPerson = MasterPerson.IDPerson) 
ON PersonDays.Location = MasterPerson.Location AND PersonDays.DAYS = FORMAT(PERSON.DATE, 'dddd');

В противном случае создайте объект запроса, который вычисляет поле с помощью Format([Date],'dddd'), а затем используйте этот запрос в другом запросе, чтобы представление дизайна могло отображать соединение.

Альтернативой является использование предложения WHERE для этого дополнительного критерия связи. Дает тот же результат и может отображаться в представлении «Дизайн», но может работать менее эффективно.

SELECT Person.IDPerson, MasterPerson.PersonName, Person.Date, MasterPerson.Location, PersonDays.Days, PersonDays.Status
FROM PersonDays INNER JOIN (Person INNER JOIN MasterPerson 
ON Person.IDPerson = MasterPerson.IDPerson) 
ON PersonDays.Location = MasterPerson.Location
WHERE PersonDays.DAYS = FORMAT(PERSON.DATE, 'dddd');

Спасибо за ваш идеальный ответ, извините, что ответил поздно

Tam88 06.06.2024 10:29
Create table #PERSON
(IDPERSON INT ,DATE Date)
insert into #PERSON values
(1000,  '29-May-24'),
(1000,  '30-May-24'),
(1001,  '29-May-24'),
(1001,  '30-May-24')


create table #MASTERPERSON
(
IDPERSON int,   PERSONNAME varchar(25), LOCATION varchar(5))
insert into #MASTERPERSON
values (
1000,   'Rey',  'A'),
(1001,  'Michael',  'B')


create table #PERSONDAYS(

LOCATION varchar(5) ,DAYS varchar(50),  STATUS varchar(20) )

insert into #PERSONDAYS values
('A',   'Wednesday',    'A10'),
('A',   'Thursday', 'A27'),
('B',   'Wednesday',    'B18'),
('B',   'Thursday', 'B29')





select * from #PERSON 
select * from #MASTERPERSON
select * from #PERSONDAYS

select p.IDPerson, m.PersonName, p.Date, m.Location, pd.Days, pd.Status
from #PERSON  as p inner join #MASTERPERSON as m
on p.IDPERSON = m.IDPERSON
inner join #PERSONDAYS  as pd on m.LOCATION = pd.LOCATION AND pd.DAYS = FORMAT(p.DATE, 'dddd')

Привет @LokeshK! Добро пожаловать в Stack Overflow. Простите, если я ошибаюсь, но ваш ответ, похоже, представляет собой код SQL, а не MS Access. Я не верю, что MS Access поддерживает временные таблицы. Кроме того, полезно предоставить объяснение вместе с дампом кода. Вот набор рекомендаций по предоставлению хорошего ответа: stackoverflow.com/help/how-to-answer Помните, что вы можете редактировать свой ответ и предоставлять подробную информацию.

StoneGiant 31.05.2024 19:50

Другие вопросы по теме