使用UNION ALL查询多表数据提示SELECT语句列数不一致怎么解决
UNION ALL列数不一致报错解决方案
报错原因
使用UNION/UNION ALL做联合查询时,强制要求所有参与联合的SELECT语句返回的列数量完全相同,且对应位置的列数据类型兼容。你当前使用SELECT *查询两张表的全部字段,msr_bills和hirisave_bills的表结构不同、字段总数不一致,因此触发报错。
修复方案
你实际业务中只需要用到name和mobile两个字段,不需要查询全表字段,直接明确指定查询的字段即可,不要用*。
修改后的代码示例
// 明确指定两个SELECT都只返回name、mobile两个字段,列数完全匹配 $sqll = "SELECT name, mobile FROM msr_bills WHERE mobile='94825XXXX' UNION ALL SELECT name, mobile FROM hirisave_bills WHERE mobile='94825XXXX'"; $sql = mysqli_query($conn,$sqll); while($row = mysqli_fetch_array($sql)){ echo $row['name']; echo $row['mobile']; }
补充注意事项
- 如果两张表对应业务字段的名称不同,需要用别名统一字段名,比如某张表的用户名字段为
username,则写成SELECT username AS name, mobile FROM 表名,保证返回结果的字段名一致,PHP取值时不会出错。 - 如果确实需要查询更多字段,可对缺少对应字段的表用默认值补全列数,比如某张表没有
create_time字段,可在对应SELECT中写NULL AS create_time补全列位。
内容的提问来源于stack exchange,提问作者Ram Gowda
相关产品推荐
相关产品推荐

