随机记录工作中常见的sql用法错误(一)

时间:2022-09-28 08:54:10

  没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的。

  

  网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方便的。想起以前开始工作的时候经常犯的错误。

  现在就写个简单的错误,大神可能一眼就看出来了,不过新手需要了解一下的。

  Create table UC_counter

  {

    id INT IDENTITY(1, 1) PRIMARY KEY,

    memberid int

  }

  

  Create table UC_member

  {

    id int ,

    name nvarchar(50) ,

    

  }

  不讨论这个表设计的合不合理,UC_counter的memberid 关联的是UC_member的id

  select (select top 1 name  from UC_member a where a.memberid = id ) from UC_counter

  很多代码生成器查出数据时类似 select * from UC_counter的语句,自己只需输入查出条件 ,查出内容(用过的应该知道,就不仔细说了),

  上面那段代码时想查出对应UC_member的那么字段, 不过会失望的。

  上面那段代码的可以翻译成

    select (select top 1 name  from UC_member a where a.memberid = a.id ) from UC_counter

  所以我会加个top 1,因为这样子查询可能会多条数据报错,多个字段相同服务器辨别不出来,找寻的是最近一个表字段,

  正确的写法:select (select top 1 name  from UC_member a where a.memberid = b.id ) from UC_counter b

  但是代码生成器怎么可能给你在表后面加别名,所以推荐那些想用代码生成工具的人,建表的时候,表关系相连的表对应字段名称最好不同

  

  

  Create table UC_counter

  {

    id INT IDENTITY(1, 1) PRIMARY KEY,

    memberid int

  }

  

  Create table UC_member

  {

    Mid int ,

    name nvarchar(50) ,

    

  }

  select (select top 1 name  from UC_member a where a.memberid = Mid  ) from UC_counter

  这么用的话就没问题,这是突然想起来的问题,希望对不熟悉的人有帮助,以前纯属手打,写的不够详细,可以留言。