如何将表B的'Episode no'值改为与表A一致及实现两表连接?
解决方案
一、修改表B的Episode no值
既然已经将字段类型改为numeric,可以通过类型转换把带小数的数值转为整数,对齐表A的数据,执行以下SQL语句:
-- MySQL环境下 UPDATE 表B SET `Episode no` = CAST(`Episode no` AS UNSIGNED); -- SQL Server环境下 UPDATE 表B SET `Episode no` = CAST(`Episode no` AS INT);
如果需要精准过滤只修改1.0这类整数型小数的行,可以添加WHERE条件:
UPDATE 表B SET `Episode no` = CAST(`Episode no` AS UNSIGNED) WHERE `Episode no` = FLOOR(`Episode no`);
二、两张表的连接实现
现在两个表的Episode no字段类型一致且值对齐,可通过以下几种常见连接方式实现关联:
1. 内连接(INNER JOIN)
仅返回两张表中Episode no匹配的行:
SELECT * FROM 表A INNER JOIN 表B ON 表A.`Episode no` = 表B.`Episode no`;
2. 左连接(LEFT JOIN)
返回表A的全部行,以及表B中匹配的行(无匹配时表B字段为NULL):
SELECT * FROM 表A LEFT JOIN 表B ON 表A.`Episode no` = 表B.`Episode no`;
3. 右连接(RIGHT JOIN)
返回表B的全部行,以及表A中匹配的行(无匹配时表A字段为NULL):
SELECT * FROM 表A RIGHT JOIN 表B ON 表A.`Episode no` = 表B.`Episode no`;
4. 全连接(FULL JOIN)
返回两张表的所有行,匹配行合并,不匹配部分对应字段为NULL(MySQL不支持原生FULL JOIN,可通过UNION组合左/右连接实现):
SELECT * FROM 表A LEFT JOIN 表B ON 表A.`Episode no` = 表B.`Episode no` UNION SELECT * FROM 表A RIGHT JOIN 表B ON 表A.`Episode no` = 表B.`Episode no`;
内容的提问来源于stack exchange,提问作者Kumari Nikhita
相关产品推荐
相关产品推荐

