【问题标题】:Access 2007 Left join and nullsAccess 2007 左连接和空值
【发布时间】:2010-12-06 16:01:04
【问题描述】:

我运行了以下简单查询,如下例所示: (简单地说,一个订单有1到N个商品,外键是table items中的order_id)

SELECT orders.*, items.*
FROM orders
LEFT JOIN
items ON orders.id= items.order_id

这显示类似:

order.id    item.id
   1           34
   1           22
   1           90
   2           44
   2           19
   2           21
   2           22

我想要这样的输出:

order.id    item.id
   1           34
               22
               90
   2           44
               19
               21
               22

如何在 Access 2007 上实现?

提前谢谢你, 米卢德 B.

【问题讨论】:

  • 1) 为什么要这样做? 2) 指定item.id 顺序的逻辑是什么?可以随意吗?即 1 可以与 22 而非 34 配对吗?
  • 物品的id根本不重要,我显示的只是一个数字。我想这样做是为了为用户提供更具可读性的输出。谢谢
  • 您要做的是更改用户界面中的显示,而不是 sql 查询。您是在表格或报告上显示结果吗?您不能(不应该)在查询本身中执行此操作。
  • 如果您想“为用户提供更具可读性的输出”,请使用报告!有一个控件属性可以隐藏其中的重复值。查询是数据工具,而不是演示工具。

标签: sql database ms-access ms-access-2007


【解决方案1】:

我能想到的唯一方法是使用聚合进行自联接。它会在您的应用程序中更容易/更好地处理。

SELECT
         IIF( i2.id = MIN(i.id), i.order_id, NULL) AS order_id,
         i2.id AS item_id
FROM     items i
         INNER JOIN orders o
         ON       o.id= i.order_id
         LEFT JOIN items i2
         ON       i2.order_id=i.order_id
GROUP BY i.order_id
ORDER BY i.order_id,
         i2.id

【讨论】:

  • 感谢您的提示!绝妙的把戏;)。 @Remou:Case 必须成为 IIF,然后才能完美运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多