mysql - SQL查询-使条件成为条件?

标签 mysql insert insert-update

我有两个表(这些只是简化版本):

`Locations`:
id  city  country  area
--  ----  -------  ----
71  C     X        E             
72  C     B        E             
73  C     F        G             
74  L     X        E
75  M     N        O
76  M     N        E          

`Findings`:
ID  city  country  area  resultVM
--  ----  -------  ----  --------
18                       empty
19  C                    lam  
20        X              lam8    
21                 E     pdg4   

现在,我想根据这两个表中的数据编写一个插入来填充第三个表。它应该包含一次 Location 表中的所有 id(Summed.locations_id 显然是对 Locations.id 的引用),以及Findings 表中的匹配 resultVM。结果应该是:

`Summed`:
locations_id   resultVM
------------   --------
71             lam        
72             lam        
73             lam        
74             lam8
75             empty
76             pdg4   

标准是:首先尝试匹配城市以在Findings表中查找结果VM,如果没有结果则匹配国家/地区,然后匹配区域,最后如果根本没有结果则匹配空行,其中没有城市/国家/地区已满。

目前,我正在对重复键执行 4 次插入/更新,但由于表非常大,因此需要花费大量时间。有谁知道这是否可以通过一次更新/插入/任何操作(在 MySQL 中)来完成? 谢谢!

最佳答案

尝试:

INSERT INTO `Summed`
SELECT
  `l`.`id`,
  COALESCE(
    `fcity`.`resultVM`,
    `fcountry`.`resultVM`,
    `farea`.`resultVM`,
    `fempty`.`resultVM`)
FROM
  `Locations` `l`
    LEFT JOIN `Findings` `fcity` ON `l`.`city` = `fcity`.`city`
    LEFT JOIN `Findings` `fcountry` ON `l`.`country` = `fcountry`.`country`
    LEFT JOIN `Findings` `farea` ON `l`.`area` = `farea`.`area`
    LEFT JOIN `Findings` `fempty` ON `fempty`.`city` = '' AND
                         `fempty`.`country` = '' AND
                         `fempty`.`area` = '';

SQL Fiddle demo

关于mysql - SQL查询-使条件成为条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503670/

相关文章:

mysql - 当计算机意外关闭时,mysql 数据会发生什么情况?

mysql - 目标表不可更新错误

sql - Postgres : update a row on conflict insert and return old values

arrays - 如何在delphi中使用动态数组

mysql - 更新非键索引列时 INSERT 或 UPDATE MySQL?

mysql - 将 UTF-8 txt 文件插入 MySql 结果出现错误代码 1366

sql - 如何连接行 SQL?

mysql - 制作条件 MySQL Insert 语句

php - 表单不会向数据库提交信息

mysql - #1064 - 你的 SQL 语法有错误;检查手册....您的 MariaDB 服务器版本以获取在第 1 行的 ')........ 附近使用的正确语法