首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL的列名冲突陷阱:为什么SELECT a.id, a.*能运行,而SELECT id, *却报错?

    问题重现:两个相似的SQL,不同的命运 先来看两个具体的例子: -- SQL1: 这个可以正常运行 SELECT a.id, a.* FROM test1 a; -- SQL2: 这个会报错 SELECT...分析器负责解析SQL语句的结构,当它遇到SELECT id, * ...时,会这样分析: id:识别为一个列名 *:识别为所有列的简写,包括id列 结果:检测到列名冲突!...而当分析器遇到SELECT a.id, a.* ...时: a.id:识别为表a的id列 a.*:识别为表a的所有列 由于有别名限定,分析器认为这是明确的指令,不会将其视为错误 4....在这种情况下,使用列别名是更好的选择: -- 使用列别名区分不同表的同名字段 SELECT u.id as user_id, p.id as product_id, u.name...小结 MySQL对SELECT a.id, a.*和SELECT id, *的不同处理,体现了数据库设计中的一个重要原则:明确性优于隐晦性。

    20010

    为什么 insert 配置 SELECT LAST_INSERT_ID() 返回个0呢?

    通常只要配置的没问题,返回对象中也有对应的 id 字段,那么就可以正确的拿到返回值了。PS:问题就出现在这里,小傅哥手写的 Mybatis 竟然只难道返回一个0!...因为最开始这两条语句执行的时候,在获取链接的时候,每一条都是获取一个新的链接,那么也就是说,insert xxx、select LAST_INSERT_ID() 在两个 connection 连接执行时...,其实是不对的,没法获取到插入后的索引 ID,只有在一个链接或者一个事务下(一次 commit)才能有事务的特性,获取插入数据后的自增ID。...每一次都是新的链接,代码块如下; 这里的链接获取,最开始没有 if null 的判断,每次都是直接获取链接,所以这种非一个链接下的两条 SQL 操作,所以必然不会获得到正确的结果,相当于只是单独执行 SELECT...LAST_INSERT_ID() 所以最终的查询结果为 0 了就!

    1.3K30

    SAP ABAP 技能:SELECT、SELECT SINGLE 和 SELECT DISTINCT

    最近开始接触一些BW历程的内容,就看到有有一部分SELECT关键词不同,但是功能类似,就想着整理一下。 SELECT 语句 SELECT 语句用于从一个数据源中查询符合条件的所有记录。...SELECT SINGLE 语句 SELECT SINGLE 语句用于从一个数据源中查询符合条件的一条记录。查询结果可以存储在一个单一变量或者一个结构体中。...SELECT DISTINCT 语句会去重,只返回不同的记录。...总结 总的来说,SELECT 用于查询多条记录,SELECT SINGLE 用于查询一条记录,SELECT DISTINCT 用于查询不同的记录。在实际开发中,应根据具体的需求选择合适的语句。...如果只需要查询一条记录,建议使用 SELECT SINGLE,可以提高查询效率和代码可读性。如果需要查询多条记录,则需要使用 SELECT。

    6.3K20

    SELECT * 和 SELECT 全部字段

    在 MySQL 查询中,SELECT * 和 SELECT 全部字段 的两种写法有不同的优缺点,以及 HAVING 子句和 WHERE 子句在查询中的异同点。...一、SELECT * 和 SELECT 全部字段 的优缺点 SELECT * 的写法 SELECT * 表示选择表中的所有字段。...SELECT 全部字段 的写法 SELECT 全部字段 表示选择表中的所有字段,但它需要手动列出每个字段。这种写法的优点是可控性更高,可以精确地选择需要的字段,从而提高查询性能和减少网络传输开销。...综上所述,SELECT * 和 SELECT 全部字段 的两种写法各有优缺点。在实际应用中,我们需要根据具体情况选择合适的写法。如果需要查询所有字段,可以使用 SELECT *。...本文详细分析了 MySQL 查询中 SELECT * 和 SELECT 全部字段 的优缺点,以及 HAVING 子句和 WHERE 子句在查询中的异同点。

    4.3K30
    领券