结果为左连接条件的情况

时间:2019-12-12 13:18:02

标签: sql google-bigquery

表1

Staff   category hours cost
1     Cleaning   5    20
1     Scrubbing  6    30
1     Cleaning   8    40
2     Scrubbing  4    30

表2

`

Staff  type vendor category 
 1      part  A Cleaning
 1      full  b Cleaning 
 1      full  c Scrubbing 
...’

要连接这两个表,我添加了一个新的col“ type”:

Case when table1.hours=8
Then ”full”
Else ”part”
End as “type”

From table1 
Left join table2 on type=table2.type
And Table 1.staff =table2.staff

And Table1.category = table 2.category

我想要的结果是

Staff  category   Cost vendor type
  1      Cleaning  20  A.     Part
  1      Cleaning  40  B.     Full
  1      Scrubbing 30  C.    Part

但是type = table2.type条件不起作用,所以变成了

Staff  category   Cost vendor type
  1      Cleaning  20  A.     Part
  1      Cleaning  20  B.     part
  1      cleaning  40. A      Full
  1.      Cleaning 40  B.     Full

2 个答案:

答案 0 :(得分:2)

如果我不了解,则需要一个实现,该实现在table1中创建一个列,然后在条件table1.category = table2.category和table1.type = table2.type上与table2联接。如果是这种情况,您可以尝试以下操作:

SELECT t1.Staff, t1.category, t1.cost, table2.vendor, t1.type
FROM (
  SELECT *, CASE WHEN table1.hours = 8 THEN "full" ELSE "part" END as type
  FROM table1
) t1
INNER JOIN table2
ON t1.category = table2.category
AND t1.type = table2.type
AND t1.staff = table2.staff

答案 1 :(得分:2)

以下是用于BigQuery标准SQL

#standardSQL
SELECT staff, category, cost, vendor, type
FROM (
  SELECT *, IF(hours = 8, 'full', 'part') AS type 
  FROM `project.dataset.table1`
) t1 
LEFT JOIN `project.dataset.table2` t2 
USING (type, staff, category)