我正在将缺少数据的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 = 1
和place = 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'
,创建一个临时表,并连接其余的place
、value
、description
和subcode
字段以检索缺失的代码。我正在检索 * 大多数 * 缺失的记录,但也引入了重复项。
如何正确选择和插入缺少place = 2
的行
2条答案
按热度按时间hivapdat1#
这个解决方案避免了EXCEPT,EXCEPT在每个RDBMS中都不起作用(不确定mysql)
我没有访问mysql来测试这一点,但我从Rasgo那里得到了这一点,它自动编写SQL。
kmb7vmvb2#
我们可以使用select来测试其他值是否存在。我们可以单独使用查询来检查不匹配的值,或者在插入中添加缺失的值。
(“001x”,1)、(“001x”,2)、(“002x”,1)、(“003x”,2);
第一章