【问题标题】:Display names using matching ID from two tables and returning a name value from the one pool of names使用来自两个表的匹配 ID 显示名称并从一个名称池中返回名称值
【发布时间】:2017-06-04 16:03:08
【问题描述】:

我有两张桌子。使用 SQL 我想从一个名称池中查找名称。例如:

if foodid1 = foodID return foodName,
if foodid2 = foodID return foodName, 
if foodid3 = foodid return foodname  

我的表格如下所示:

food table               order table
FoodID   FoodName        OrderID   FoodID1   FoodID2    FoodID3
1         chicken           1        1         2           3         
2          fish             2        3         4           5         
3          lamb             3        1         3           2               
4          pie                                                      
5         steak                                        

我想要一个返回类似以下值的查询:

OrderID    FoodID1   FooDID2   FoodID3
1          chicken   fish      lamb
2          lamb      pie       steak
3          chicken   lamb      fish

我可以让它显示相关的 ID 和第一组名称,但是当我更改代码以获取更多信息时出现错误。不确定此查询的正确语法。

SELECT [ORDER TABLE].OID, [ORDER TABLE].FID1, [FOOD TABLE].[Food Name], [ORDER TABLE].FID2
FROM [FOOD TABLE] INNER JOIN [ORDER TABLE] ON [FOOD TABLE].[FID] = [ORDER TABLE].[FID2];

【问题讨论】:

    标签: sql ms-access select join


    【解决方案1】:

    您需要在[food table] 上加入[order table] 三次,每个FoodId 一次:

    SELECT     o.[OrderId], f1.[Food Name], f2.[Food Name], f3.[Food Name]
    FROM       [ORDER TABLE] o
    INNER JOIN [FOOD TABLE] f1 ON o.[FoodId1] = f1.[FoodId]
    INNER JOIN [FOOD TABLE] f2 ON o.[FoodId2] = f2.[FoodId]
    INNER JOIN [FOOD TABLE] f3 ON o.[FoodId3] = f3.[FoodId]
    

    【讨论】:

      【解决方案2】:

      如果您打算使用该数据结构,我推荐 Mureinik 的答案,因为它肯定会给您明确要求的结果。但是,我很好奇您为什么使用三个不同的 food_ID 设置数据。问问自己,以下两个顺序有什么不同吗?

      1) 牛排、鸡肉、馅饼

      2) 馅饼、牛排、鸡肉

      如果答案是否定的并且您可以修改您的结构,我建议您保留 FoodTable 原样,并像这样设置 Order 表:

      OrderID|FoodID
      1       1
      1       2
      1       3
      2       3
      2       4
      2       5
      3       1
      3       3
      3       2
      

      那么您的选择查询将如下所示:

      SELECT o.OrderID, f.FoodName
      FROM [Order Table] o LEFT JOIN [Food Table] f ON o.FoodID = f.FoodID
      

      【讨论】:

      • 这个答案的问题在于它排除了值为 0 的字段。我试图包括 where order.fid1 = 0 和 order.fid1 = food.fid
      • 零是什么意思?你的意思是空吗?
      • 如果单元格为空,则忽略该单元格,如果忽略该单元格,则无法显示该行其余部分的值,因为它在所有单元格中都没有值
      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多