SQL: свяжите table1 и table2 с объединенной строкой, а затем - table3 - PullRequest
0 голосов
/ 18 декабря 2018

Я ломаю голову над этой проблемой, но не могу понять, что я делаю неправильно.

Настройка таблицы

enter image description here

1) Присоединитесь к table1 & table2

2) Присоединитесь к этому с table3

Первая часть вопроса, которую я добавил.SQL выглядит так:

SELECT *  
FROM Table1 LEFT JOIN 
     Table2 
     ON Table1.Name & " " & Table1.LastName = Table2.FullName

Но когда я хочу включить table3 в запрос, я получаю сообщение об ошибке.

SELECT * 
FROM (Table1 LEFT JOIN 
      Table2 
      ON Table1.Name & " " & Table1.LastName = Table2.FullName
     ) INNER JOIN 
     Table3 
     ON Table2.id = Table3.id

Ошибка:

Синтаксическая ошибка в предложении FROM.

Ответы [ 6 ]

0 голосов
/ 18 декабря 2018

это будет работать:

select * from Table1 t1,Table2 t2,Table3 t3
where 
t1.Name||' '||t1.LastName=t2.FullName and
t2.Id=t3.Id
0 голосов
/ 18 декабря 2018

MS Access имеет загадочные правила о внешних объединениях.Я думаю, вы хотите два внешних соединения в любом случае.Это работает?

SELECT * 
FROM (Table1 LEFT JOIN 
      Table2 
      ON Table1.Name & " " & Table1.LastName = Table2.FullName
     ) LEFT JOIN 
     Table3 
     ON Table2.id = Table3.id
0 голосов
/ 18 декабря 2018

Действительно, это синтаксическая ошибка.Попробуйте это:

SELECT * 
FROM Table1 
LEFT JOIN Table2 
      ON Table1.Name & " " & Table1.LastName = Table2.FullName
INNER JOIN Table3 
     ON Table2.id = Table3.id

Кроме того: когда вы ссылаетесь на таблицу исключенных соединений во втором соединении, используйте также левое соединение.Так вот так:

SELECT * 
FROM Table1 
LEFT JOIN Table2 
      ON Table1.Name & " " & Table1.LastName = Table2.FullName
LEFT JOIN Table3 
     ON Table2.id = Table3.id
0 голосов
/ 18 декабря 2018

Похоже, вам не нужно использовать подзапрос.Скорее всего, в вашем случае должно быть достаточно следующего запроса:

SELECT * 
FROM
    Table1 
    LEFT JOIN Table2 ON Table1.Name & " " & Table1.LastName = Table2.FullName
    INNER JOIN Table3 ON Table2.id = Table3.id
0 голосов
/ 18 декабря 2018

Использование вложенных реквестеров выбора с присвоением псевдонима

SELECT *  
FROM 
(
  SELECT 
Table1.Name
, Table1.LastName
, Table2.FullName
, Table2.id AS table2_id
  Table1 LEFT JOIN 
      Table2 
      ON Table1.Name & " " & Table1.LastName = Table2.FullName
) AS T
INNER JOIN 
     Table3 
     ON T.table2_id= Table3.id
0 голосов
/ 18 декабря 2018

Что по этому поводу:

SELECT     *
FROM       Table1
LEFT JOIN  Table2
       ON  Table1.Name & " " & Table1.LastName = Table2.FullName
INNER JOIN Table3
        ON Table2.id = Table3.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...