我一直试图在两个不同模式的两个不同表之间进行外部联接。我试图从表格变体中筛选出小于4且大于5个数字的字符。联接最后没有使用简单的where子句,因此决定了。
问题是,如果我不加上引号,Snowflake会说我输入了无效的标识符。但是,当我用引号将其运行时,它可以工作,但是我得到的raw.stitch_heroku.spree_variants.SKU
列中的值仅被命名为列名,遍及整个表!
SELECT
analytics.dbt_lcasucci.product_category.product_description,
'raw.stitch_heroku.spree_variants.SKU'
FROM analytics.dbt_lcasucci.product_category
LEFT JOIN (
SELECT * FROM raw.stitch_heroku.spree_variants
WHERE LENGTH('raw.stitch_heroku.spree_variants.SKU')<=5
and LENGTH('raw.stitch_heroku.spree_variants.SKU')>=4
) ON 'analytics.dbt_lcasucci.product_category.product_id'
= 'raw.stitch_heroku.spree_variants.SKU'
有没有办法解决这个问题?我很困惑,还没有在论坛上找到这个问题!
提前
答案 0 :(得分:1)
首先,单引号定义一个字符串文字'this is text'
,其中双引号是表/列名称"this_is_a_table_name"
在表中添加别名使SQL更具可读性,并且可以使用来减少重复长度命令,因此应该更好地工作:
SELECT pc.product_description,
sp.SKU
FROM analytics.dbt_lcasucci.product_category AS PC
LEFT JOIN (
SELECT SKU
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(SKU) BETWEEN 4 AND 5
) AS sp
ON pc.product_id = sp.SKU;
因此,我减少了子选择结果,因为您仅使用了sp中的sku
,但由于示例中存在product_id
与sku
的比较,因此您无需加入
无效的标识符对我来说是一个错误的名称,第一步是检查表是否存在,并且按您的期望对列进行命名,并且JOIN x ON y
子句的列类型通过:
describe table analytics.dbt_lcasucci.product_category;
describe table raw.stitch_heroku.spree_variants;