在此处完成SQL Amateur。我有一个Google工作表,用户可以在其中输入A[B or C]
格式的数据。因此,使用此表:
+-------+-------------+-------------+
| A | B | C |
+-------+-------------+-------------+
| Apple | Red | Crunchy |
| Pear | | Crunchy |
| Lemon | | |
+-------+-------------+-------------+
..我希望得到以下回报:
输入apple[red]
返回Apple Red
输入apple[crunchy]
返回Apple Crunchy
因此,除了B
之外,基本上只返回{{1}}或C
,具体取决于匹配发生在哪一列。实际上,A
可以在任一列{ {1}}或crunchy
(但不是两个)。
到目前为止,我已经拥有了:
B
但是很明显,它无法按我的要求运行,并且匹配项按预期返回C
。
所以我想我的问题是,您能否根据匹配条件有条件地返回列,以及Select A, B, C where
UPPER(H) matches '.*(?:^|,|,\s)"®EXEXTRACT(Q3,"^[^\[]+")&"(?:,\s|,|$).*'
and B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' limit 1
和A B C
匹配中使用OR
的最佳方法是什么?我尝试仅放置B
,但失败了。我想您可以写出另一行像C
一样,但是所有这些事情开始变得很混乱,我想这是一种更简单的方法。
我想知道的另一件事是,是否存在一种使and B or C matches
和B matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"' or C matches '"®EXEXTRACT(Q3, "\[(\w+)\]")&"'
均为可选的方式,因此在上面的情况下,如果用户仅输入B
,C
返回。我本打算使用工作表apple
和2个查询来完成此操作,这取决于是否存在Apple
,但想知道它是否可以在一个SQL语句中使用。
感谢您的帮助。这样的头不会刮任何头发!
答案 0 :(得分:1)
好的,那么您将如何在Google表格中执行此操作? Google表格查询有两个问题,使它有点尴尬
(1)没有工会
(2)您不能返回空集-它会给您一条错误消息。
两个单独的查询如下所示:
=ArrayFormula(query({A:B,A:A&"["&B:B&"]"},"select Col1,Col2 where Col3='"&F1&"'"))
和
=ArrayFormula(query({A:A,C:C,A:A&"["&C:C&"]"},"select Col1,Col2 where Col3='"&H1&"'"))
其中F1和H1包含必需的输入。
要组合它们,您必须输入IFERROR语句,如下所示:
=ArrayFormula(iferror(query({A:B,A:A&"["&B:B&"]"},"select Col1,Col2 where Col3='"&J1&"'"),iferror(query({A:A,C:C,A:A&"["&C:C&"]"},"select Col1,Col2 where Col3='"&H1&"'"),"")))
这是假设只有一个查询提供了结果。
答案 1 :(得分:0)
如果我理解您的问题,为什么不这样做:
create table mytable (A text, B text, C text);
insert into mytable values ('Apple', 'Red', 'Crunchy'), ('Pear', null, 'Crunchy'), ('Lemon', null, null);
select * from mytable;
-- Example 1: input = apple[red]
select a, b from mytable where upper(a || '[' || b || ']') = upper('apple[red]')
union all
select a, c from mytable where upper(a || '[' || c || ']') = upper('apple[red]');
-- Example 2: Same query different input = apple[crunchy]
select a, b from mytable where upper(a || '[' || b || ']') = upper('apple[crunchy]')
union all
select a, c from mytable where upper(a || '[' || c || ']') = upper('apple[crunchy]');
您甚至可以在upper(a ||'['|| b ||']')和upper(a ||'['|| c ||']')上创建功能索引