我有一个以此方式设置的表:
doc product
a 2
a 1
a 1
b 1
c 3
c 2
d 1
我需要选择与订购产品1具有相同文档ID的所有项目,但实际上不将文档中的所有项目分组。
因此最终结果应如下所示:
doc product
a 2
a 1
a 1
b 1
d 1
有没有一种方法可以实现这种选择?
答案 0 :(得分:0)
您是否有任何不想在此处使用普通联接或子查询的原因?
类似以下内容:
Select * from table where doc in (
select doc from table where product = 1
) t1 ;
答案 1 :(得分:0)
以下是用于BigQuery标准SQL
displayFn(payee?: Payee): string | undefined {
if ((payee.company !== '' || null) && (payee.first_name !== '' || null && payee.last_name !== '' || null)) {
return payee ? payee.company + ' - ' + payee.first_name + ' ' + payee.last_name : undefined;
} else if (!payee.company) {
return payee ? payee.first_name + ' ' + payee.last_name + ' ' + payee.company : undefined;
} else if ((payee.company !== '' || null) && (payee.first_name === '' || null && payee.last_name === '' || null)) {
return payee ? payee.company : undefined;
}
}
private _filter(name: string): Payee[] {
const filterValue = name.toLowerCase();
return this.payees.filter(option =>
option.first_name.toLowerCase().indexOf(filterValue) === 0 ||
option.last_name.toLowerCase().indexOf(filterValue) === 0 ||
option.company.toLowerCase().indexOf(filterValue) === 0);
}
和纯BigQuery专用选项(用于娱乐和学习):
#standardSQL
SELECT *
FROM `project.dataset.table`
WHERE doc IN (SELECT DISTINCT doc FROM `project.dataset.table` WHERE product = 1)
答案 2 :(得分:-1)
SELECT *
FROM yourTable
WHERE doc IN (
SELECT doc
FROM yourTable
WHERE product = 1)
子查询查找订购产品1的所有文档。然后,主查询查找包含这些文档的所有行。
或
SELECT t1.*
FROM yourTable AS t1
JOIN (
SELECT DISTINCT doc
FROM yourTable
WHERE product = 1) AS t2
ON t1.doc = t2.doc
DISTINCT
可以防止所有行重复子查询返回的doc
的次数。
如果表很大,我建议使用第二种方法,因为MySQL在WHERE xxx IN (subquery)
查询中存在一些臭名昭著的性能问题。