где col1 из tab1 и col1 из tab2 в выберите из tab3 - PullRequest
0 голосов
/ 26 марта 2020

Я хочу получить некоторые записи из таблицы A и таблицы B, у них нет общих записей, но мой выбор зависит от таблицы C, в которой есть ключи к A и B, например: у меня есть 3 таблицы: A, B и C, что-то вроде этого:

      A
+----+-------+
| ID | NAME  |
+----+-------+
|  1 | nameA |
+----+-------+


     B
+----+-------+
| ID | NAME  |
+----+-------+
|  1 | nameB |
+----+-------+



        C
+-----+-----+-------+
| IDA | IDB | NAMEC |
+-----+-----+-------+
|   1 |   1 | nameC |
+-----+-----+-------+

, и я хочу получить что-то вроде этого:

+-------+-------+
| NameA | NameB |
+-------+-------+
| nameA | nameB |
+-------+-------+

, поэтому я пытаюсь с:

 select a.name, b.name
    from tableA a, tableB b
    join (select idA, idB
    from   tableC where nameC='nameC') tmp
    on tmp.idA=a.id and tmp.idB=b.id

но не работает

1 Ответ

2 голосов
/ 26 марта 2020

Это всего лишь два объединения и фильтрации:

select a.name as nameA, b.name as nameB
from tableC c join
     tableA a
     on c.idA = a.id join
     tableB b
     on c.idB = b.id
where c.nameC = 'nameC';

Ваш код не работает, потому что вы смешиваете archai c Синтаксис объединения (запятые) с правильным, явным, стандартом, читаемый JOIN синтаксис. Никогда не используйте запятые. Всегда используйте JOIN.

Причина, по которой ваш код не работает, состоит в том, что правила видимости вокруг запятых. Предложение ON не распознает первую ссылку на таблицу.

...