【发布时间】:2019-02-09 22:01:35
【问题描述】:
我正在使用一个复杂的查询。即使没有找到任何东西,我也需要始终返回一行。
SELECT
a.InventoryItemID,
a.Name,
a.RetailPrice,
b.MainGroupItemCode,
b.MainGroupItemID,
c.VatValue,
a.Code,
a.Weight,
b.MainGroupItemName,
a.RetailPrice2,
a.FreePrice,
case when isnull(e.IsActive,0)=1 and isnull(d.price,0)!=0 then d.Price else RetailPrice End as CustomPrice
from InventoryMaster a
join InventoryMainGroupItems b on a.MainGroupItemID=b.MainGroupItemID
join VatCodes c on b.VatCodeID=c.VatCodeID
join InventoryPrices d on d.InventoryItemID=a.InventoryItemID
join InventoryCatalog e on e.CatalogID=d.CatalogID
where a.InventoryItemID=2 and ISNULL(e.catalogID,1)=3
问题出在最后一行 ISNULL(e.catalogID,1)=3。在我的表中,它不存在编号为 3 的 CatalogID。 所以它没有返回任何东西,但是有编号为 1 的 CatalogID。我已将 if 设置为 null 以返回 1,不幸的是,我没有从查询中返回任何行。我该如何解决这个问题?
我的问题已经解决了,我只想再添加一个连接表,其中一个条件是不存在的
SELECT *
from
(
SELECT t1.ID,
t1.Name,
COALESCE(t2.price,t1.Price) AS price ,
Row_number() OVER(partition BY t1.ID ORDER BY t1.ID) rn
FROM InventoryMaster t1
LEFT JOIN inventoryprices t2
ON t1.ID=t2.ID
LEFT join InventoryCatalog t3
ON t3.ID=t2.ID and t3.ID=2
where t1.ID=2
) t
WHERE t.rn=1
它总是从 First Table Inventory 返回我的零售价
【问题讨论】:
-
我实际上不确定
ISNULL(e.catalogID,1)=3的目标是什么,如果catalogID的值是NULL,那么它不是3(实际上NULL不是等于NULL) 所以你可以用e.catalogID = 3替换子句。但是,您在下面的段落中要说的话恐怕没有什么意义。也许这里有语言障碍;如果是这样,我建议您请更熟悉英语的人来翻译您的问题,因为它目前没有任何意义。 -
您似乎是在说您没有任何
catalogID值为 3 的行,所以我希望该查询永远不会返回任何行。这就像有一个子句WHERE ID = -1但列 ID 的所有值都是正数。 -
我可以给一个远程桌面,想必你能更好地理解我的意思。
-
恐怕我不是顾问(你必须为此付费)。
-
没问题。
标签: sql-server sql-server-2008-r2