如何在MySQL单条查询语句中同时选择指定列与通配符?
如何在MySQL关联查询中同时选取指定列与通配符
嘿,这个问题其实挺常见的,咱们直接说解决方案和注意点就行~
你的原语句里直接写*会同时拉取submissions和orders两个表的所有列,而且你已经单独指定了orders.user_id并取别名orderuserid,这会导致结果里出现重复的user_id列(一个是别名的,一个是原列),甚至可能因为列名歧义引发问题。
正确的做法是给通配符*加上表名/表别名的限定,明确你要拉取哪个表的所有列,这样就能和指定列共存且不冲突。
示例写法(推荐)
如果你想获取orders.user_id(别名orderuserid)加上submissions表的所有列,语句应该改成这样:
SELECT orders.user_id as orderuserid, submissions.* FROM submissions INNER JOIN orders ON orders.listing_id = submissions.listing_id WHERE orders.user_id = [你的目标用户ID]; -- 这里补充你的具体ID值
如果需要同时获取两个表的所有列,再加上指定的别名列,可以这么写:
SELECT orders.user_id as orderuserid, submissions.*, orders.* FROM submissions INNER JOIN orders ON orders.listing_id = submissions.listing_id WHERE orders.user_id = [你的目标用户ID];
不过要注意:这样会导致orders.user_id重复出现一次(一次是别名orderuserid,一次是原orders.user_id),如果不需要重复列,建议只保留需要的表的*。
关键注意点
- 关联多表时,永远不要直接用裸
*,否则容易出现列名重复、返回冗余数据的问题,用表名.*能明确范围。 - 生产环境中,除非确实需要表的所有列,否则最好明确列出需要的字段,避免表结构变更后引发应用层异常。
内容的提问来源于stack exchange,提问作者devloper
相关产品推荐
相关产品推荐

