MySQL关联表中如何获取第二个ID?关联查询时第二个ID未显示
嘿,我来帮你搞定这个问题!首先得先指出你这条SQL里的两个关键问题——先把语法错误修正,再解决id显示的问题:
1. 首先修正JOIN条件的语法错误
你原语句里关联categories的条件pkg.cat_id=1=categories.cat_id=1完全不符合MySQL的语法规范,这会导致查询执行失败或者结果不符合预期。正确的做法是先关联pkg和categories的cat_id字段,再筛选cat_id=1的记录,有两种清晰的写法:
- 把筛选条件放到
WHERE子句里(更易读):JOIN categories ON pkg.cat_id = categories.cat_id WHERE categories.cat_id = 1 - 或者把筛选条件直接放到
ON子句里:JOIN categories ON pkg.cat_id = categories.cat_id AND categories.cat_id = 1
2. 同时获取两个表的id字段
你查询的pkg和package表都有id字段,当你只写pkg.id时,只会返回pkg表的id,而package表的id根本没被包含在查询结果里。要同时获取两个id,你需要明确指定每个id所属的表,并且最好给它们起别名,避免结果里的字段名重复混淆。
比如把SELECT部分改成:
SELECT package.pkg_name, pkg.cat_id, pkg.id AS pkg_id, -- 给pkg的id起别名,方便识别 package.id AS package_id -- 明确选中package的id,同样起别名
完整的修正后SQL
把上面的修改整合起来,最终的SQL应该是这样的:
SELECT package.pkg_name, pkg.cat_id, pkg.id AS pkg_id, package.id AS package_id FROM pkg INNER JOIN package ON pkg.id = package.id JOIN categories ON pkg.cat_id = categories.cat_id WHERE categories.cat_id = 1;
执行这条语句后,结果里就会同时显示pkg表的id(别名pkg_id)和package表的id(别名package_id),再也不会出现只有一个id的情况啦!
内容的提问来源于stack exchange,提问作者kasunk
相关产品推荐
相关产品推荐

