【问题标题】:Nested Inner Join With Outer Join in MS ACCESSMS ACCESS 中的嵌套内连接和外连接
【发布时间】:2016-11-25 08:41:36
【问题描述】:

我已经查看了有关此主题的一些先前问题,但似乎无法得到我的问题的答案。

我有 3 张桌子(Lot、Menu、SKU)。

我需要给定 SKU 的菜单中的所有成分及其在 SKU 中的相关产品名称,即使 LOT 中没有相关行

我当前的查询:

    select m.IngrSKU, m.IngMeasurementID, s.productName, m.quantity as   mQuantity, l.quantity, l.lot 
    from (Menu m 
    inner join sku s on m.ingrsku = s.sku)
    left outer join lot l on m.ingrsku + '-070516j' = l.lot and l.destinationid = 2 
    where m.skutype = 4 and m.SKU = '1321'

我读到外部联接必须在内部联接之后,但我仍然收到“不支持联接表达式”错误。

有什么想法吗?

更新:此查询在 SQL Server 中提供所需的结果集;只是无法让它在 Access 中运行

【问题讨论】:

  • Access 中的左外连接是左连接
  • 也许 Access 在这里确实有一个奇怪的限制:“外部联接可以嵌套在多表联接中的内部联接中,但内部联接不能嵌套在外部联接中。” msdn.microsoft.com/en-us/library/bb243855(v=office.12).aspx
  • @random_answer_guy:我尝试了左连接并得到了相同的结果。
  • @shawn00 我查看了其他问题的回答,这些问题建议颠倒顺序或进行两个左连接(在这种情况下不起作用)。想知道是否有人对此有建议或重写查询的方法(也许是子查询?)
  • @Jeff0 尽管 Access 有其古怪之处,但没有任何逻辑理由以任何特定顺序编写联接。无论哪种方式,其他平台都会接受您的查询。

标签: sql ms-access left-join inner-join


【解决方案1】:

原来问题出在左连接中的多个条件。

我添加了括号,它解决了。

    select m.IngrSKU, m.IngMeasurementID, s.productName, m.quantity as   mQuantity, l.quantity, l.lot 
    from (Menu m 
    inner join sku s on m.ingrsku = s.sku)
    left outer join lot l on (m.ingrsku + '-070516j' = l.lot and l.destinationid = 2) 
    where m.skutype = 4 and m.SKU = '1321'

【讨论】:

  • 很奇怪。我没有做太多访问,但我不记得在那里看到过括号。
【解决方案2】:

你试过不带括号吗?

select m.IngrSKU, m.IngMeasurementID, s.productName, m.quantity as , mQuantity, l.quantity, l.lot 
from Menu m 
join sku s on m.ingrsku = s.sku
left join lot l on m.ingrsku + '-070516j' = l.lot and l.destinationid = 2 
where m.skutype = 4 and m.SKU = '1321'

【讨论】:

    【解决方案3】:
        select y.IngrSKU, y.IngMeasurementID, y.productName, 
    y.quantity as   mQuantity, y.quantity, y.lot  
        from  ((select *
            from Menu m 
            inner join sku s on m.ingrsku = s.sku ) x
            left outer join lot l on x.ingrsku + '-070516j' = l.lot 
    
    and l.destinationid = 2 ) y
            where y.skutype = 4 and y.SKU = '1321'
    

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多