Присоединение к третьему столу, но не типичное соединение - PullRequest
1 голос
/ 06 мая 2011

Это мой запрос прямо сейчас:

 SELECT
 a.stacct, b.hacct, a.stfrqcode, b.thfrqcode 
 FROM st a
 LEFT JOIN th b
 ON b.hacct = a.stacct

Проблема: у меня есть третья таблица, которая имеет отношение каждого stfrqcode к каждому thfrqcode (например, ax = d4);проблема в том, как мне отодвинуть все назад и сказать, совпадают ли они?В справочной таблице есть два столбца stfrqcode и thfrqcode - они имеют разные значения в каждом столбце.

Схема

Таблица st:

stacct,

stfrqcode

таблица th:

hacct,

thfrqcode

таблица кодов:

thfrqcode,

stfrqcode

данные из кодов frq

ns x00
ed x22
zs x33
ao x44

Результат должен быть следующим: stacct, hacct и, в основном, aда / нет, если есть совпадение между stfrqcode и thfrqcode.

Ответы [ 3 ]

3 голосов
/ 06 мая 2011
SELECT
   a.stacct
  ,b.hacct
  ,case when c.stfrqcode is null then 'No' else 'Yes' end IsMatch
 from st a
  left outer join th b
   on b.hacct = a.stacct
  left outer join ThirdTable c
   on c.stfrqcode = a.stfrqcode
    and c.thfrqcode = b.thfrqcode

... там могут быть какие-то опечатки, я не могу их отладить.

1 голос
/ 06 мая 2011

Предполагая, что я понимаю вашу структуру таблицы (с некоторыми фиктивными значениями, которые я создал):

Таблица st

stacct    stfrqcode
fred         A
mary         B
joseph       C

Таблица th

hacct     thfrqcode
fred         J
mary         H

Отношение к таблице

stfrqcode   thfrqcode
   A            J
   B            Q

и вам нужно это решение (я удалил hacct, так как значение может быть равно либо stacct, либо null, если совпадения нет):

stacct    match
fred       yes
mary       no
joseph     no

это запрос Iпостараюсь:

SELECT
 a.stacct, (CASE WHEN c.strfrqcode IS NULL THEN 'no' ELSE 'yes' END) AS match
 FROM st a
 LEFT JOIN th b
 ON b.hacct = a.stacct
 LEFT JOIN relation c
 ON c.strfrqcode = a.strfrqcode and c.thfrqcode = b.thrfrqcode and b.thrfrqcode IS NOT NULL
0 голосов
/ 06 мая 2011

Если ваша таблица frqcodes не обязательно уникальна для (stfrqcode, thfrqcode) или просто потому, что вы можете, вы можете попробовать использовать предложение существует в списке выбора:

SELECT a.stacct, b.hacct, a.stfrqcode, b.thfrqcode,
       CASE WHEN EXISTS (SELECT 1
                         FROM frqcodes AS c
                         WHERE c.stfrqcode = a.stfrqcode
                           AND c.thfrqcode = b.thfrqcode)
            THEN 'Yes'
            ELSE 'No'
       END AS relationship_exists
FROM st a
     LEFT JOIN th b
     ON b.hacct = a.stacct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...