Search code examples
sql-servert-sqlforeign-keysprimary-keyforeign-key-relationship

Table Join Referencing Same Primary Key T-SQL


Is it valid to have a Table which references the same Primary Key to assign a value to multiple of it's Foreign Key? I.E. :

Table Menu

ItemID(PK)  DishName        Category
  1         Fried Chicken   Poultry
  2         Salmon          Fish
  3         Spaghetti       Pasta
  4         Steak           Beef
  5         Roasted Cod     Fish
  6         Baked Halibut   Fish
  7         Maple Duck      Poultry

Table [TableOrder] where OrderItem# refers to the primary key of the Menu table.

PartyID OrderItem1(FK)  OrderItem2(FK)  OrderItem3(FK)
    1       3               2               5
    2       7               1               2
    3       2               5               6
    4       4               4               2
    5       6               3               2

Is it possible (how could you) to return a query that lists the category as such? (Where Order#Cat is an alias to Category in the Menu table using an (Inner) Join)

PartyID Order1Cat  Order2Cat  Order3Cat
  1     Pasta       Fish        Fish    
  2     Poultry     Poultry     Fish    
  3     Fish        Fish        Fish    
  4     Beef        Beef        Fish    
  5     Fish        Pasta       Fish

As in

 SELECT        
     [Table Order].PartyID, [Table Order].OrderItem1, 
     [TableOrder].OrderItem2, [Table Order].OrderItem3, 
     Menu.Category
 FROM
     [Table Order] 
 INNER JOIN
     Menu ON [Table Order].OrderItem1 = Menu.ItemID
     ...
     (alias ?)...
     (subquery ?)...

If not, please suggest an alternative structure that would permit similiar results. Thanks for your time.


Solution

  • try :

    SELECT tblo.PartyID, 
           tm1.Category Order1Cat,
           tm2.Category Order2Cat,
           tm3.Category Order3Cat
    FROM [Table Order] tblo
    INNER JOIN [Table Menu] tm1
        ON tblo.OrderItem1 = tm1.ItemID
    INNER JOIN [Table Menu] tm2
        ON tblo.OrderItem2 = tm2.ItemID
    INNER JOIN [Table Menu] tm3
        ON tblo.OrderItem3 = tm3.ItemID