Подстрока в состоянии левого соединения - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу создать подстроку в условии соединения, но она не работает.

SELECT    
  IF (ps.shop = 'NL',TopCat.Parent_Title, CategoryUID.Parent_Title) as Parent_Title,
  IF (ps.shop = 'NL',TopCat.Sub_Title_1, CategoryUID.Sub_Title_1) as Sub_Title_1,
  IF (ps.shop = 'NL',TopCat.Sub_Title_2, CategoryUID.Sub_Title_2) as Sub_Title_2,
  ps.ean, ps.product_resource_id        
FROM `xxlhoreca-bi.PriceSearch.XXL_PriceComparison` ps
LEFT JOIN
  `xxlhoreca-bi.DataImport.TopCategories` topCat
ON
  ps.product_resource_id = topCat.product_resource_id
LEFT JOIN
  `DataImport.CategoryUID` CategoryUID
ON
  SAFE_CAST(SUBSTR('DataImport.CategoryMappingWithLocalID.Reporting_ID', 4) AS INT64) = CategoryUID.Category_ID
GROUP BY
  1, 2, 3, 4, 5

Есть ли способ как написать substring в условии LEFT JOIN?

Мне нужно изменить часть substring, но я не смог этого добиться. Буду признателен за любую помощь!

Заранее спасибо!

1 Ответ

2 голосов
/ 16 апреля 2020

Вы находитесь на правильном пути.

Я собираюсь сделать несколько предположений здесь, так что терпите меня, но я думаю, что есть образованные догадки.

  1. Я думаю, что DataImport.CategoryMappingWithLocalID.Reporting_ID - это поле (Reporting_ID) из таблицы (CategoryMappingWithLocalID), имеющейся в вашем наборе данных (DataImport).
  2. То, что вы пытаетесь достичь, - это получить категории, включенные в ваш CategoryMappingWithLocalID.
  3. Вы пытаетесь получить подстроку из поля Reporting_ID, поскольку она содержит нужный идентификатор в первых 4 символах.
  4. Поскольку для SUBSTR требуется строка, вы пытаетесь превратить эту ссылку dataset.table.field в строку, заключив ее в одинарные кавычки, что заставляет меня думать, что на самом деле это может быть цифра c поле в исходной таблице.

Теперь решение.

  1. Вам нужно использовать таблицу в своем запросе, если вы хотите использовать ее в предложении JOIN ON. Поэтому вам нужно добавить дополнительный JOIN там.
  2. Вы находитесь на правильном пути с партией SUBSTR, но вам нужно использовать CAST(field AS STRING) для преобразования вашего численного значения c в строку.

Соедините эти две вещи в своем запросе, и вы готовы go, мой друг.

JOIN `DataImport.CategoryMappingWithLocalID` AS category_mapping
    ON 
SAFE_CAST(SUBSTR(CAST(DataImport.CategoryMappingWithLocalID.Reporting_ID AS STRING), 4) AS INT64) = CategoryUID.Category_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...