【发布时间】:2020-10-10 05:57:15
【问题描述】:
我刚刚开始学习 SQL,到目前为止(从两天前开始)我设法解决了我的大部分问题,但现在我需要帮助。
下面的查询产生 1 列和 1 行:“12345”和一些额外的值为 0 的行,我需要删除它们。
SELECT product_id FROM sale_order_line WHERE order_id IN (SELECT id FROM sale_order WHERE name='S00062')
所以我尝试了以下方法:
SELECT product_id FROM sale_order_line WHERE order_id IN (SELECT id FROM sale_order WHERE name='S00062') AND NOT product_id='0'
现在我得到了我期待的结果“12345”。 但是当我尝试从另一个表中获取与“12345”相关的列的名称时......:
SELECT name FROM product_template WHERE product_variant_ids IN (SELECT product_id FROM sale_order_line WHERE order_id IN (SELECT id FROM sale_order WHERE name='S00062') AND NOT product_id='0')
我收到一条错误消息:“无法将整数的数据类型与字符串进行比较”。 不知何故,上面的代码似乎试图在所有 0 被删除之前读取 product_id。我猜。
但是,如果我直接这样做,比如:
SELECT name FROM product_template WHERE product_variant_ids = '12345'
有效! 我怎样才能解决这个问题? 请原谅我的新手编码技能。
【问题讨论】:
-
如有此类问题,请提供您的 Postgres 版本和基本表定义(
CREATE TABLE显示数据类型和约束的语句)。 -
感谢您的回复。我实际上不知道我的 postgresql 版本。我可以从 SQL 中检查它吗?我正在访问我公司的 ERP (ODOO) 在线版本,我刚刚开始了解数据库结构,我需要从 ERP 本身中提取一些我无法提取的数据。所以我正在使用 Python 连接器。所以基本上我需要从我不知道的数据库中提取数据,使用我也不知道的编程语言......
-
询问 Postgres:
SELECT version(); -
返回未知函数版本。
-
No Postgres 版本会这么说。看起来您正在使用不同的 RDBMS。
标签: sql postgresql database-design types