Можно ли создать внутреннее соединение между двумя таблицами, показывающими все B, которые содержат A? - PullRequest
1 голос
/ 26 сентября 2019

У меня есть две таблицы: кандзи и словарь.Представьте, что таблица кандзи выглядит следующим образом:

目
一
人

И таблица словаря выглядит следующим образом:

目的
一番目
一人
二人
人々
注目
目標
一匹

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

人   一人
    二人
    人々
一   一人
    一番目
    一匹
目   目的
    一番目
    注目
    目標

Я не уверен, как это сделать.Если у меня есть только один кандзи, я могу использовать функцию QUERY, чтобы сгенерировать все словари, содержащие этот кандзи.Но могу ли я создать динамическую таблицу, которая по существу является внутренней, соединяет таблицы "кандзи" и "словарь", при поиске каждого экземпляра "словаря", содержащего "кандзи"?

Я пытался использовать QUERY для объединения двух таблиц, но это не сработает, потому что таблицы не совпадают по размеру:

=QUERY({C1:C296,D1:D224}, "SELECT Col2 WHERE Col1 contains Col2")

В приведенном выше примере столбец C / Col2 - словарь, столбец D / Col1 - кандзи.

Есть ли способ сделать это с помощью Google Sheets?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019
=ARRAYFORMULA(SORT(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(IFERROR(REGEXEXTRACT(IFERROR(REGEXEXTRACT(C1:C, REPT("(.)", LEN(C1:C)))), 
 TEXTJOIN("|", 1, A1:A)))<>"", "♦"&IFERROR(REGEXEXTRACT(IFERROR(
 REGEXEXTRACT(C1:C, REPT("(.)", LEN(C1:C)))), TEXTJOIN("|", 1, A1:A)))&"♣"&C1:C, ))
 ,,999^99)),,999^99), "♦")), "♣"))))

0

1 голос
/ 26 сентября 2019

Самый простой обходной путь - получить пересечения на 1 значение:

=FILTER(D:D;REGEXMATCH(D:D;"目"))

enter image description here

На рисунке показано, как использоватькопия этой функции для получения всех пересечений


Другой подход заключается в использовании большой формулы массива, такой как:

=TRANSPOSE(SPLIT(TEXTJOIN(",";1;TRANSPOSE(ARRAYFORMULA(IF(REGEXMATCH(A1:A8;TRANSPOSE(B1:B3));A1:A8;))));","))

enter image description here

...