其中一列似乎在数据前面有某种特殊字符。当我运行此查询时:
SELECT * FROM `stocktake_products` WHERE `stocktake_id` = 4148 AND `stocktake_product_id` = '29153796'
我没有结果,但运行这个:
SELECT * FROM `stocktake_products` WHERE `stocktake_id` = 4148 AND `stocktake_product_id` LIKE '29153796'
我正在使用此字段来LEFT JOIN另一个表 (
SELECT
*
FROM stocktake_scans ss
LEFT JOIN stocktake_products sp ON ss.stocktake_product_id = sp.stocktake_product_id
LEFT JOIN stocktake_staff st ON ss.stocktake_staff_id = st.stocktake_staff_id
LEFT JOIN stocktake_areas sa ON ss.stocktake_area_id = sa.stocktake_area_id
WHERE ss.stocktake_id = X
ORDER BY stocktake_scan_id ASC;
)所以我确实需要使用"="
语法而不是LIKE
。
获取正确的产品。我尝试了TRIM(stocktake_product_id)
,但更新了0
行。有没有其他方法可以找出那个特殊的,不可见的角色,并删除它?
谢谢!
答案 0 :(得分:0)
您是否检查过列的数据类型?在我看来,stocktake_id
是整数,stocktake_product_id
是其他类型,如varchar?
这可能解释了LIKE运算符工作和=运算符失败?
编辑:刚刚注意到其他内容:您有29153796
周围的单引号,但您在4148
处没有这些引号。因此,您需要使用29153796
制作字符串,这就是您需要使用LIKE
进行比较的原因,请在没有单引号的情况下进行比较,它应该有效。
答案 1 :(得分:0)
请删除{big}之后的stocktake_product_id
='29153796'单引号
使用
stocktake_product_id
= 29153796
答案 2 :(得分:0)
你可以尝试永远不要在table_name和column_name
的两边使用``也许它会好的。
SELECT * FROM stocktake_products WHERE stocktake_id = 4148 AND stocktake_product_id = '29153796'
答案 3 :(得分:0)
我认为您的stocktake_product_id
是一个数字列。
由于MySQL会将字符串值('29153796')转换为float,这不是精确的数据类型。这可能会导致意想不到的结果。
请参阅MySQL documentation以获取有关数据类型转换如何运作的详细信息。
相关部分是:
以下规则描述了如何进行转换以进行比较 操作:
如果一个或两个参数为NULL,则比较结果为 NULL,除了NULL-safe< =>平等比较运算符。对于 NULL< => NULL,结果为true。无需转换。
如果比较操作中的两个参数都是字符串,则它们是 比较为字符串。
如果两个参数都是整数,则将它们作为整数进行比较。
如果不与a进行比较,十六进制值将被视为二进制字符串 号。
如果其中一个参数是TIMESTAMP或DATETIME列,那么 其他参数是常量,常量转换为时间戳 在进行比较之前。这样做更多 ODBC友好。请注意,这不是针对IN()的参数! 为安全起见,请始终使用完整的日期时间,日期或时间字符串 做比较。例如,在使用时获得最佳效果 BETWEEN与日期或时间值,使用CAST()显式转换 值到所需的数据类型。
如果其中一个参数是十进制值,则比较取决于 其他论点。如果是,则将参数作为十进制值进行比较 其他参数是十进制或整数值,或者是浮点数 如果另一个参数是浮点值,则返回值。
在所有其他情况下,参数将被比较为浮点数 (实际)数字。
使用上述知识,您的查询应如下所示:
SELECT * FROM `stocktake_products`
WHERE `stocktake_id` = 4148 AND `stocktake_product_id` = 29153796
答案 4 :(得分:-1)
好的,从stocktake_scans
导出数据后,删除特定stocktake_id
的数据,从表中删除id
的产品并重新加载文件,以便再次完成插入,并使用stocktake_product_id
表中的stoccktake_scans
的新值更新stocktake_product_id
中的products
列,一切似乎都有效。我不知道为什么它第一次出现问题,第一次发生在我身上。
感谢所有想要帮助的人!