mariadb 从同一个表中检索缺少的数据

tpgth1q7  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(115)

我正在将缺少数据的CSV文件导入MariDB表。我需要找到没有相应place = 2的所有代码。

Table cityX
| id | code | place | value | description | subcode | 
| 1  | 001x |  1    |  6.00 | unique str  |   A     |
| 2  | 002x |  1    |  2.23 | diff string |   B     |
| 3  | 003x |  1    |  2.23 | another str |   B     |

表中的每个code都必须有一个包含place = 1place = 2的重复行

| id | code | place | value | description | subcode |
| 1  | 001x |  1    |  6.00 | unique str  |   A     |
| 2  | 001x |  2    |  6.00 | unique str  |   A     |

我使用了select ... except语句的变体来隔离具有不同数量错误字段的代码。
使用SELECT [code] FROM cityX WHERE place = '1' EXCEPT SELECT [code] FROM cityX where place = '2',创建一个临时表,并连接其余的placevaluedescriptionsubcode字段以检索缺失的代码。我正在检索 * 大多数 * 缺失的记录,但也引入了重复项。
如何正确选择和插入缺少place = 2的行

hivapdat

hivapdat1#

这个解决方案避免了EXCEPT,EXCEPT在每个RDBMS中都不起作用(不确定mysql)

SELECT CODES.code,
       CODE_W_1.place AS place_1,
       CODE_W_2.place AS place_2
FROM   (SELECT code
        FROM   cityx
        GROUP  BY code) AS CODES
       LEFT OUTER JOIN (SELECT code,
                               place
                        FROM   cityx
                        WHERE  place = 1
                        GROUP  BY code) AS CODE_W_1
                    ON CODES.code = CODE_W_1.code
       LEFT OUTER JOIN (SELECT code,
                               place
                        FROM   cityx
                        WHERE  place = 2
                        GROUP  BY code) AS CODE_W_2
                    ON CODES.code = CODE_W_2.code
WHERE  code_w_1 IS NULL
        OR CODE_W_2.code IS NULL

我没有访问mysql来测试这一点,但我从Rasgo那里得到了这一点,它自动编写SQL。

kmb7vmvb

kmb7vmvb2#

我们可以使用select来测试其他值是否存在。我们可以单独使用查询来检查不匹配的值,或者在插入中添加缺失的值。

create table cityX (
  id int primary key not null auto_increment,
  code char(5),
  place int );
insert into cityX (code, place) values

(“001x”,1)、(“001x”,2)、(“002x”,1)、(“003x”,2);
第一章

  • db〈〉小提琴

相关问题