mysql - 如何加入到结果有时会以 - 符号开头的表?
问题描述
希望我能很好地解释这一点。我有一个独特的问题,我们使用的客户系统可以根据产品状态在后台更改数据库中的 ID。
这意味着当我想报告我们不再使用的旧产品以及活动产品时,两个关键表之间的 ID 会有所不同,具体取决于那里的状态。这意味着产品表中的活动产品与库存项目表中的活动产品匹配,两者都显示为,647107376
但是当产品不再处于活动状态时,该StockItem
表将显示为,647107376
但包含 id 显示为的产品信息的表-647107376
当我将表格连接在一起以获取所需信息时,这对我来说是个问题。最初我的查询设置如下:
SELECT
Company_0.CoaCompanyName
,SopProduct_0.SopStiStockItemCode AS hbpref
,SopProduct_0.SopStiCustomerStockCode AS itemref
,SopProduct_0.SopDescription AS ldesc
,StockMovement_0.StmOriginatingEntityID AS Goodsin
FROM
SBS.PUB.StockItem StockItem_0
LEFT JOIN SBS.PUB.SopProduct SopProduct_0 ON StockItem_0.StockItemID = SopProduct_0.StockItemID
LEFT JOIN SBS.PUB.Company Company_0 ON SopProduct_0.CompanyID = Company_0.CompanyID
LEFT JOIN SBS.PUB.StockMovement StockMovement_0 ON StockItem_0.StockItemID = StockMovement_0.StockItemID
WHERE
Company_0.CoaCompanyName = ?
AND StockMovement_0.MovementTypeID = '173355'
AND StockMovement_0.StmMovementDate >= ? AND StockMovement_0.StmMovementDate <= ?
AND StockMovement_0.StmQty <> 0
AND StockMovement_0.StockTypeID ='12049886'
不幸的是,尽管这意味着任何旧产品都不会显示,因为没有匹配的 id,因为SopProduct
表格显示StockItemID
了前导-
因此,我认为最好使用带有嵌套和其中的case when
语句来显示结果,但这似乎不适用于下面的连接示例:concat
left
LEFT JOIN SBS.PUB.SopProduct SopProduct_0 ON (CASE WHEN LEFT(SopProduct_0.StockItemID,1) = "-" THEN CONCAT("-",StockItem_0.StockItemID) ELSE StockItem_0.StockItemID END) = SopProduct_0.StockItemID
其他人能想出解决这个问题的方法吗?我正在使用 Progress OpenEdge ODBC。
解决方案
数字看起来像数字。如果是,您可以使用abs()
:
ON StockItem_0.StockItemID = ABS(SopProduct_0.StockItemID)
否则一个相对简单的方法是:
ON StockItem_0.StockItemID IN (SopProduct_0.StockItemID, CONCAT('-', SopProduct_0.StockItemID))
请注意,不等式条件通常会减慢JOIN
操作速度。
推荐阅读
- javascript - 使用 react 从 google taxonomy api 获取数据?
- r - 如何在 R 中删除数据框中的原始和复制案例?
- javascript - 如何在 QML 的窗格中排列一个矩形?
- reactjs - React 下拉菜单中的百万选项
- c++ - 在抛出 'std::system_error' 的实例后调用终止
- javascript - 从 RSS Feed XML 中提取文本标签(使用 Javascript/React)
- python - 是否可以使用 python 正则表达式找到非连续重复字符?
- php - 在两个表上左连接并希望从特定日期获取结果
- ios - SKStoreReviewController.requestReview() 在 ViewController 加载之前出现在后台
- vim - 如何将“RustRun”重定向到 vim 中的拆分缓冲区