我在bigquery中有两个表,可以在一个ID上进行匹配。不幸的是,其中一个ID带有前缀(不一致的3位数字) 例如,一个ID为“ 12345”(表2 / id),第二个ID为“ T1_12345”(表1 / Link_id)
从第一个表中进行选择时,我可以使用SUBSTR删除前缀,然后再使用第二个表。但是,如果我想首先在第二个表中选择具有较短前缀的表,并且比在第一个表中进行选择,我将找不到解决方法。
下面的代码是我正在使用的示例。
我正在寻找类似于RIGHT或SUBSTR函数的东西,但是基本上是相反的。
SELECT body from [table] where link_id in
(SELECT
id
FROM
[table_two]
WHERE
author == "Username")
此代码不正确,但可能会更清晰地说明我正在尝试执行的操作。
SELECT body from [table] where "12345" in
(SELECT
"T1_12345"
FROM
[table_two]
WHERE
author == "Username")
编辑: 例如,如果我有这两个表... 表1
| First_name| Link ID |
|-----------|-----------|
| James |T1_12345 |
| John |T2_12346 |
表2
| Surname| ID |
|-----------|--------|
| Tobbin |12345 |
| Peterson |12346 |
我运行了这个查询...
SELECT first_name from [table 1] where Link_ID in
(SELECT
ID
FROM
[table_two]
WHERE
Surname == "Peterson")
我想要的输出是:约翰·彼得森
答案 0 :(得分:2)
以下是用于BigQuery标准SQL
filterCompletedTasks = () => {
const todos = [...this.state.todos];
const filtered = todos.filter(todo => {
return todo.isDone;
});
结果:
[('Jun-07', 10),
('Jun-08', 15),
('Jun-09', 16),
('Nov-07', 17),
('Nov-08', 16),
('Nov-09', 14),
('May-11', 16),
('May-10', 18),
('May-13', 14),
('May-12', 14),
('May-14', 12),
('Jun-14', 10),
('Jun-11', 14),
('Jun-10', 19),
('Jun-13', 13),
('Jun-12', 14),
('Feb-09', 10),
('Nov-14', 10),
('Nov-13', 12),
('Nov-12', 13)]
-
#standardSQL
SELECT first_name
FROM `project.dataset.table_one`
WHERE SUBSTR(Link_ID, 4) IN (
SELECT ID
FROM `project.dataset.table_two`
WHERE Surname = 'Peterson'
)
结果:
Row first_name
1 John
以下是BigQuery旧版SQL
#standardSQL
SELECT CONCAT(first_name, ' ', Surname) full_name
FROM `project.dataset.table_one`
LEFT JOIN `project.dataset.table_two`
ON SUBSTR(Link_ID, 4) = ID
WHERE Surname = 'Peterson'
-
Row full_name
1 John Peterson
答案 1 :(得分:0)
如果您想使用in
,就不能只使用它吗?
SELECT body
FROM [table]
WHERE link_id IN (SELECT SUBSTR(id, 4)
FROM [table_two]
WHERE author = 'Username'
);