最佳答案
我将使用一个具体但假设的例子。
每个订单通常只有一个行项目:
订单:
OrderGUID OrderNumber========= ============{FFB2...} STL-7442-1{3EC6...} MPT-9931-8A
产品线:
LineItemGUID Order ID Quantity Description============ ======== ======== ================================={098FBE3...} 1 7 prefabulated amulite{1609B09...} 2 32 spurving bearing
但偶尔会有两个行项目的订单:
LineItemID Order ID Quantity Description========== ======== ======== ================================={A58A1...} 6,784,329 5 pentametric fan{0E9BC...} 6,784,329 5 differential girdlespring
通常,当向用户显示订单时:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.DescriptionFROM OrdersINNER JOIN LineItemsON Orders.OrderID = LineItems.OrderID
我想显示订单上的单个项目。但是,如果这个偶尔的订单包含两个(或更多)项目,订单出现将是重复:
OrderNumber Quantity Description=========== ======== ====================STL-7442-1 7 prefabulated amuliteMPT-9931-8A 32 spurving bearingKSG-0619-81 5 panametric fanKSG-0619-81 5 differential girdlespring
我真正想要的是SQL服务器随便挑一个,因为它将是足够好:
OrderNumber Quantity Description=========== ======== ====================STL-7442-1 7 prefabulated amuliteMPT-9931-8A 32 differential girdlespringKSG-0619-81 5 panametric fan
如果我喜欢冒险,我可能会向用户显示一个省略号,以指示存在多个:
OrderNumber Quantity Description=========== ======== ====================STL-7442-1 7 prefabulated amuliteMPT-9931-8A 32 differential girdlespringKSG-0619-81 5 panametric fan, ...
所以问题是如何要么
我第一次天真的尝试是只加入“TOP1”行项目:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.DescriptionFROM OrdersINNER JOIN (SELECT TOP 1 LineItems.Quantity, LineItems.DescriptionFROM LineItemsWHERE LineItems.OrderID = Orders.OrderID) LineItems2ON 1=1
但这给出了错误:
列或前缀“订单”不
匹配表名或别名
在查询中使用。
大概是因为内部选择看不到外部表。