单行子查询returns雪花多行
Single-row subquery returns more than one row in snowflake
单行子查询returns多行
这是我在 运行 以下雪花代码时遇到的错误。
我知道这是因为 TO_VARCHAR 函数不适用于整个 table 列..知道如何解决问题并将其应用于整个列吗?
SELECT sv.SKU
, li.price
, li.cost_price
, pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5) as sv
ON li.variant_id = sv.id
LEFT JOIN (SELECT analytics.dbt_lcasucci.product_category.product_description
, TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) as pc
ON (SELECT TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) = sv.id
GROUP BY sv.SKU,li.price,li.cost_price,pc.product_description
我必须将名为 analytics.dbt_lcasucci.products
的 table 的数据类型从 int 更改为 varchar,因为如果不这样做,连接将无法识别这些字段并且只会打印空值,即使实际单元格的内容将匹配。
您在 ON 子句中有一个错误的子查询..
SELECT sv.SKU
, li.price
, li.cost_price
, pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (
SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5
) as sv ON li.variant_id = sv.id
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description
, TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) my_key
FROM analytics.dbt_lcasucci.product_category
) as pc ON pc.my_key = sv.id
并且没有聚合功能..你不需要分组..如果你不想要重复的行,最终使用不同的
ON (SELECT TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) = sv.id
您需要将多值表达式 TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
转换为单值表达式。
使用任意聚合函数,如MIN()
、MAX()
、AVG()
、SUM()
等
例如,您可以使用 MAX(TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID))
作为:
SELECT
sv.SKU,
li.price,
li.cost_price,
pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (
SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5
) as sv ON li.variant_id = sv.id
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description,
TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category
) as pc ON (
SELECT MAX(TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID))
FROM analytics.dbt_lcasucci.product_category
) = sv.id
GROUP BY sv.SKU, li.price, li.cost_price, pc.product_description
单行子查询returns多行
这是我在 运行 以下雪花代码时遇到的错误。 我知道这是因为 TO_VARCHAR 函数不适用于整个 table 列..知道如何解决问题并将其应用于整个列吗?
SELECT sv.SKU
, li.price
, li.cost_price
, pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5) as sv
ON li.variant_id = sv.id
LEFT JOIN (SELECT analytics.dbt_lcasucci.product_category.product_description
, TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) as pc
ON (SELECT TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) = sv.id
GROUP BY sv.SKU,li.price,li.cost_price,pc.product_description
我必须将名为 analytics.dbt_lcasucci.products
的 table 的数据类型从 int 更改为 varchar,因为如果不这样做,连接将无法识别这些字段并且只会打印空值,即使实际单元格的内容将匹配。
您在 ON 子句中有一个错误的子查询..
SELECT sv.SKU
, li.price
, li.cost_price
, pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (
SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5
) as sv ON li.variant_id = sv.id
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description
, TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID) my_key
FROM analytics.dbt_lcasucci.product_category
) as pc ON pc.my_key = sv.id
并且没有聚合功能..你不需要分组..如果你不想要重复的行,最终使用不同的
ON (SELECT TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category) = sv.id
您需要将多值表达式 TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
转换为单值表达式。
使用任意聚合函数,如MIN()
、MAX()
、AVG()
、SUM()
等
例如,您可以使用 MAX(TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID))
作为:
SELECT
sv.SKU,
li.price,
li.cost_price,
pc.product_description
FROM raw.stitch_heroku.spree_line_items as li
LEFT OUTER JOIN (
SELECT *
FROM raw.stitch_heroku.spree_variants
WHERE LENGTH(raw.stitch_heroku.spree_variants.SKU) Between 4 and 5
) as sv ON li.variant_id = sv.id
LEFT JOIN (
SELECT analytics.dbt_lcasucci.product_category.product_description,
TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID)
FROM analytics.dbt_lcasucci.product_category
) as pc ON (
SELECT MAX(TO_VARCHAR(analytics.dbt_lcasucci.product_category.product_ID))
FROM analytics.dbt_lcasucci.product_category
) = sv.id
GROUP BY sv.SKU, li.price, li.cost_price, pc.product_description