Соединение на основе того же столбца

У меня есть две таблицы, такие как TableA и TableB.

Схема для таблицы А:

     UoMID
     UoMName

Схема для таблицы B:

     ItemID
     ItemName
     UoMID
     D1_UoMID
     D2_UoMID
     D3_UoMID

Здесь я хочу объединить обе эти таблицы на основе UoMID в таблице A и UoMID, D1_UoMID, D2_UoMID и D3_UoMID в таблице B. Я хочу получить следующие столбцы:

     ItemName, UoMName, D1_UoMName, D2_UoMName and D3_UoMName

Как восстановить вышеуказанные столбцы? и Как определить UoMName для соответствующих UoMID, D1_UoMID, D2_UoMID и D3_UoMID?


person thevan    schedule 14.07.2011    source источник


Ответы (3)


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

SELECT
    ItemName,
    d0.UoMName,
    d1.UoMName as D1_UoMName,
    d2.UoMName as D2_UoMName,
    d3.UoMName as D3_UoMName
from TableB tb
join TableA d0 on d0.UoMID = tb.UoMID
join TableA d1 on d1.UoMID = tb.D1_UoMID
join TableA d2 on d2.UoMID = tb.D2_UoMID
join TableA d3 on d3.UoMID = tb.D3_UoMID;
person Bohemian♦    schedule 14.07.2011

SELECT ta.UoMName, ta1.UoMName, ta2.UoMName ta3.UoMName 
FROM TableA AS ta, TableA AS ta1, TableA AS ta2, TableA AS ta3, TableB AS tb
WHERE ta.UoMID = tb.UoMID
AND ta.UoMID = tb.UoMID
AND ta1.UoMID = tb.D1_UoMID
AND ta2.UoMID = tb.D2_UoMID
AND ta3.UoMID = tb.D3_UoMID

Вы должны давать псевдонимы таблицам, если хотите использовать одну и ту же таблицу более одного раза.

person Jacob    schedule 14.07.2011

SELECT 
     b.ItemName,
     (SELECT a1.UoMName FROM TableA a1 WHERE a1.UoMID = b.UoMID) as UoMName,
(SELECT a2.UoMName FROM TableA a2 WHERE a2.UoMID = b.D1_UoMID) as D1_UoMName,
(SELECT a3.UoMName FROM TableA a3 WHERE a3.UoMID = b.D1_UoMID) as D3_UoMName,
(SELECT a4.UoMName FROM TableA a4 WHERE a4.UoMID = b.D1_UoMID) as D3_UoMName,
FROM TableB b

Надеюсь, это работает

person ysrb    schedule 14.07.2011
comment
Юк... этот запрос действительно будет работать очень плохо. Вам не нужно делать подвыборки! - person Bohemian♦; 14.07.2011