SUBSTR相反,用于大查询

时间:2018-06-20 10:29:00

标签: sql google-bigquery

我在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")

我想要的输出是:约翰·彼得森

2 个答案:

答案 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'
                 );