【发布时间】:2020-02-27 03:28:34
【问题描述】:
我正在尝试跨三个表执行联接。 这是初始代码,它有效,但对产品描述返回所有 NULL。我认为这是因为在我加入的前 2 个表中,加入键是 varchar 类型,而在另一个表中是 INT。 int 键是 analytics.dbt_lcasucci.product_category.product ID(上次加入)。
SELECT raw.stitch_heroku.spree_line_items.variant_id
, raw.stitch_heroku.spree_variants.SKU
, raw.stitch_heroku.spree_line_items.price
, raw.stitch_heroku.spree_line_items.cost_price
, pc.product_description
FROM raw.stitch_heroku.spree_line_items
LEFT OUTER JOIN raw.stitch_heroku.spree_variants
ON raw.stitch_heroku.spree_line_items.variant_id = raw.stitch_heroku.spree_variants.id
LEFT JOIN analytics.dbt_lcasucci.product_category as pc ON pc.product_ID = raw.stitch_heroku.spree_variants.id
GROUP BY raw.stitch_heroku.spree_line_items.variant_id
, raw.stitch_heroku.spree_variants.SKU
, raw.stitch_heroku.spree_line_items.price
, raw.stitch_heroku.spree_line_items.cost_price
, pc.product_description
接下来,我尝试使用一些雪花函数将 analytics.dbt_lcasucci.product_category.product ID 转换为 varchar。
这是我尝试过的:
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description
, T0_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) as pc
ON pc.product_ID= sv.id
或
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description
, TRY_CAST(analytics.dbt_lcasucci.product_category.product_ID as VARCHAR(10)
FROM analytics.dbt_lcasucci.product_category) as pc
ON pc.product_ID= sv.id
我得到的错误是:无效的标识符 T0_VARCHAR 或函数 TRY_CAST 不能与 NUMBER(38,0) 和 VARCHAR(10) 类型的参数一起使用
我不确定是否有办法通过这样做来修复它,或者我是否应该重新上传该文件以更改其来源的类型。
提前谢谢你!!!!
【问题讨论】:
-
当我查看您的代码时,我必须注意到这一点:T0_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) FROM 在这部分代码中,您似乎使用过TO_VARCHAR 数字为零 0 而不是字母 O ? TO_VARCHAR T0_VARCHAR 请检查。
-
第二次尝试我在这里看到:docs.snowflake.net/manuals/sql-reference/functions/… 你必须发送一个字符串作为 TRY_CAST 函数的参数。
-
实际上你是对的 - 输入 0 而不是 O 的愚蠢错误。这解决了这个问题!谢谢你。现在我需要弄清楚如何修复单行子查询返回多行。
-
太棒了。你介意我把这个作为答案,你可以把它标记为正确吗?对于您的新问题,如果您自己不管理,我建议发布一个新问题...
-
我想我接受了 :)
标签: sql join types left-join snowflake-cloud-data-platform