我有一些记录有关于商店的信息。这些记录有几个不同的嵌套字段。嵌套字段之一是标签,一个是员工。我正在尝试计算具有标签和具有特定名称的员工的商店数量。所以我这样做了:
SELECT count(*)
FROM [stores.stores_844_1]
where tags.tag_name='foo'
and employees.first_name='bar'
然后我得到错误:
Error: Cannot query the cross product of repeated fields tags.tag_name and employees.first_name
.
我可以通过将查询更改为:
SELECT count(*)
FROM ((flatten([stores.stores_844_1],tags))
where tags.tag_name='foo'
and employees.first_name='bar'
这样做的问题是我正在动态创建where子句,因此我的 from子句必须根据我在where中的内容进行更改。虽然我可以在代码中生成一些逻辑来确定from子句应该是什么,但我想知道是否有一种方法可以执行以下操作:
SELECT count(*)
FROM [stores.stores_844_1]
where tags.tag_name='foo' WITHIN RECORD
and employees.first_name='bar' WITHIN RECORD
那就不用把主表弄平了?我尝试过像这样使用丑陋的解决方法:
SELECT count(*)
FROM
(SELECT GROUP_CONCAT(CONCAT('>', tags.tag_name,'<')) WITHIN RECORD as f1, GROUP_CONCAT(CONCAT('>',employees.first_name,'<')) WITHIN RECORD as f2
FROM [stores.stores_844_1]
)
where f1 CONTAINS '>foo<'
and f2 CONTAINS '>bar<'
这种丑陋的解决方法可以按我的意愿工作,但它看起来真的很丑陋,必须有更好的方法,对吧?