簡體   English   中英

根據其他表中的值更新表列

[英]Update table columns based on values in other table

我有兩張桌子

                 showroom
============================================
model_id    car_name         is_available
--------------------------------------------
   0        rav4              false
   1        tacoma            false
   2        corolla           false
   3        tundra            false

      warehouse
========================
model_id    car_name         
------------------------
   0        rav4              
   1        tacoma   

主鍵是model_id 如果model_id存在於warehouse我想將列showroom.is_available更新為 true 。 所以根據上面的例子輸出將是

                  showroom
    ============================================
    model_id    car_name         is_available
    --------------------------------------------
       0        rav4              true
       1        tacoma            true
       2        corolla           false
       3        tundra            false

我知道我能做到

UPDATE showroom
SET is_available = true
WHERE model_id IN (
SELECT model_id
FROM warehouse
);

但是兩個表都有超過 10 億行,即使我使用的是 Spark SQL,查詢也很慢

SELECT
  a.model_id
  ,a.car_name
  ,CASE WHEN b.model_id IS NOT NULL THEN TRUE ELSE FALSE END is_available
FROM
  showroom a
  LEFT OUTER JOIN warehouse b ON (a.model_id = b.model_id)

在大表上,連接比 IN 子句快

看看你能不能#t減少這個數字

對於陳列室,您可以在 (model_id,is_available) 上使用組合索引

當您還可以減少可能的候選人數量時

UPDATE showroom s
INNER JOIN warehouse w ON s.model_id = w.model_id
SET s.is_available = true
WHERE s.is_available = FALSE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM