什么样的人会写这样的sql语句(实际工程中)

时间:2022-06-01 12:46:59
select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
p.title,
up.hasproduct,
up.price,
up.inputdate
from userproduct up
inner join product p on up.productid=p.productid
inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";

21 个解决方案

#1


我做了近十年的开发了,早就不做数据库网站类的东西了。最近项目需要和公司一二十岁的小伙子合作,问问他数据从哪几张表取出来的,对应关系怎么样。他丢给我一堆这样的代码。我真想扁他。

#2


难道是我不懂数据库了?难道现在就流行这样的代码?我拿出来大家帮我想想,免得回头错扁了他。

#3


哈哈

#4


真的说说,我要回去打人了

#5


我还真的怀疑自己会错怪他,我已经5年多没认真做过数据库了。所以请大家帮我看看,麻烦解释一下!

#6


SQL语句没问题,只是表之间的关系复杂

#7


楼上兄台的意思是他不是在调戏我?

#8


inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";
这几句他一定是在调戏我了,一个表定义三个别名,fir÷sec÷thd都是一个表的别名

#9


自己表内的upcatano=catano,然后下一行转身catano=upcatano

#10


select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
p.title,
up.hasproduct,
up.price,
up.inputdate
from userproduct up
inner join product p on up.productid=p.productid
inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";

inner join好办,不要写这么难看的代码:

个人认为容易理解些的如下:

select fir.name as topcataname,sec.name as seccataname,thd.name as thdcataname,
p.title,up.hasproduct,up.price,up.inputdate
from userproduct up,product p,cata thd,cata sec,cata fir
where up.productid=p.productid and p.catano=thd.catano and thd.upcatano= sec.catano
and on sec.upcatano= fir.catano 
改写之后,还是难看,呵呵。
cata 一个表记录着三个级别的东西,却用三个字段来区分。不如考虑用两个字段来区别,一个是parent,一个是层,其实有一个parent就行了。
查找结果是用户产品的价格,注册时间以及产品名称以及三个cata(这是什么意思)级别的名称。



#11


楼上的理解不对吧,fir、sec、thd都是cata的别名啊?
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";
这两句替换后不就是cata.upcatano=cata.catano;然后重复了一遍么?
select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
不都是选择数据库中同一字段么?

#12


//原来代码
select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
p.title,
up.hasproduct,
up.price,
up.inputdate
from userproduct up
inner join product p on up.productid=p.productid
inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";

//这是我解析出来的意思
select cata.name as topcataname,
cata.name as seccataname,
cata.name as thdcataname,
product.title,
userproduct.hasproduct,
userproduct.price,
userproduct.inputdate
from userproduct up
inner join product p on userproduct.productid=product.productid
inner join cata thd on product.catano=cata.catano
inner join cata sec on cata.upcatano= cata.catano
inner join cata fir on cata.upcatano= cata.catano ";

//进一步简化。可以得到
select 
cata.name,
cata.name ,
cata.name,
product.title,
userproduct.hasproduct,
userproduct.price,
userproduct.inputdate
from userproduct
inner join product  on userproduct.productid=product.productid
inner join cata on product.catano=cata.catano
inner join cata on cata.upcatano= cata.catano
inner join cata on cata.upcatano= cata.catano;

大家看看我理解正不正确?

#13


njz168(飞龙在天) 出来说说话,是你无意看错了还是我的理解是错误的,这很关键,我已经大骂了写这段代码的人,如果真的是我理解有误,我还得跟人家道歉

#14


lyllirui(小李)
根据代码的意思,的确是要原来那样写的。
同表关联,必须用别名才能区别记录集。
关联时,并不需要表中全部内容,而是符合条件的记录集了,别名就表示该记录集的意思。

#15


把代码放在视图设计器中看一下可视化关系不就清楚了嘛!

#16


有这样的用法,不过可能是数据库设计时偷懒了。

#17


很多不同类的数据写在了同一个表的同一个字段

#18


呵呵,还蛮好玩的,lyllirui(小李)有意思的人。

#19


我看那代码没错啊!你可以用视图看一下!

#20


去扁人吧

#21


玩笑

#1


我做了近十年的开发了,早就不做数据库网站类的东西了。最近项目需要和公司一二十岁的小伙子合作,问问他数据从哪几张表取出来的,对应关系怎么样。他丢给我一堆这样的代码。我真想扁他。

#2


难道是我不懂数据库了?难道现在就流行这样的代码?我拿出来大家帮我想想,免得回头错扁了他。

#3


哈哈

#4


真的说说,我要回去打人了

#5


我还真的怀疑自己会错怪他,我已经5年多没认真做过数据库了。所以请大家帮我看看,麻烦解释一下!

#6


SQL语句没问题,只是表之间的关系复杂

#7


楼上兄台的意思是他不是在调戏我?

#8


inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";
这几句他一定是在调戏我了,一个表定义三个别名,fir÷sec÷thd都是一个表的别名

#9


自己表内的upcatano=catano,然后下一行转身catano=upcatano

#10


select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
p.title,
up.hasproduct,
up.price,
up.inputdate
from userproduct up
inner join product p on up.productid=p.productid
inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";

inner join好办,不要写这么难看的代码:

个人认为容易理解些的如下:

select fir.name as topcataname,sec.name as seccataname,thd.name as thdcataname,
p.title,up.hasproduct,up.price,up.inputdate
from userproduct up,product p,cata thd,cata sec,cata fir
where up.productid=p.productid and p.catano=thd.catano and thd.upcatano= sec.catano
and on sec.upcatano= fir.catano 
改写之后,还是难看,呵呵。
cata 一个表记录着三个级别的东西,却用三个字段来区分。不如考虑用两个字段来区别,一个是parent,一个是层,其实有一个parent就行了。
查找结果是用户产品的价格,注册时间以及产品名称以及三个cata(这是什么意思)级别的名称。



#11


楼上的理解不对吧,fir、sec、thd都是cata的别名啊?
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";
这两句替换后不就是cata.upcatano=cata.catano;然后重复了一遍么?
select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
不都是选择数据库中同一字段么?

#12


//原来代码
select fir.name as topcataname,
sec.name as seccataname,
thd.name as thdcataname,
p.title,
up.hasproduct,
up.price,
up.inputdate
from userproduct up
inner join product p on up.productid=p.productid
inner join cata thd on p.catano=thd.catano
inner join cata sec on thd.upcatano= sec.catano
inner join cata fir on sec.upcatano= fir.catano ";

//这是我解析出来的意思
select cata.name as topcataname,
cata.name as seccataname,
cata.name as thdcataname,
product.title,
userproduct.hasproduct,
userproduct.price,
userproduct.inputdate
from userproduct up
inner join product p on userproduct.productid=product.productid
inner join cata thd on product.catano=cata.catano
inner join cata sec on cata.upcatano= cata.catano
inner join cata fir on cata.upcatano= cata.catano ";

//进一步简化。可以得到
select 
cata.name,
cata.name ,
cata.name,
product.title,
userproduct.hasproduct,
userproduct.price,
userproduct.inputdate
from userproduct
inner join product  on userproduct.productid=product.productid
inner join cata on product.catano=cata.catano
inner join cata on cata.upcatano= cata.catano
inner join cata on cata.upcatano= cata.catano;

大家看看我理解正不正确?

#13


njz168(飞龙在天) 出来说说话,是你无意看错了还是我的理解是错误的,这很关键,我已经大骂了写这段代码的人,如果真的是我理解有误,我还得跟人家道歉

#14


lyllirui(小李)
根据代码的意思,的确是要原来那样写的。
同表关联,必须用别名才能区别记录集。
关联时,并不需要表中全部内容,而是符合条件的记录集了,别名就表示该记录集的意思。

#15


把代码放在视图设计器中看一下可视化关系不就清楚了嘛!

#16


有这样的用法,不过可能是数据库设计时偷懒了。

#17


很多不同类的数据写在了同一个表的同一个字段

#18


呵呵,还蛮好玩的,lyllirui(小李)有意思的人。

#19


我看那代码没错啊!你可以用视图看一下!

#20


去扁人吧

#21


玩笑