您的位置:首页 > 数据库

编写sql语句时,最重要的是什么?

2017-01-03 18:44 405 查看
首先,弄清楚需求,

接下来就是编写了,最重要的就是选定主表

这个很很重要,主表选错了,可能就是无解或者就是写出来的sql语句很复杂

在工作中遇到商家发货地址和退货地址的实例,之前数据都是存放在t_shipping_address表中,里面既有商家收货地址,发货地址,还有买家的收货地址,这样比较乱,现在就是需要重新创建一张表,来保存商家的发货地址和退货地址,新建表t_supplier_address使用supplier_id来作为查询条件,然而之前t_shipping_address表是通过user_id来作为查询的,supplier_id和user_id可以通过用户表t_user来获取。

首先我选主表选错了,我选的主表是t_shipping_address   (就是不能把user_id更新成supplier_id)

我的思路分二步走,一、先把t_shipping_address表中数据插入到t_supplier_address,

                                    二、再根据t_supplier_address与t_user关联关系,把user_id更新成t_user表中的supplierId

写法如下:

insert into t_supplier_address(id,supplier_id,aid,provinceName,cityName,areaName,address,name,phone,order_no,companyname,tel,returned,send,comments) 

select id, user_id as supplier_id,aid,provinceName,cityName,areaName,address,name,phone,order_no,companyname,tel,returned,send,comments from t_shipping_address 

where user_id in

(select user.id from t_user as user

left join t_shipping_address as shipping on user.id=shipping.user_id 

where type in(2,3) and user.supplierId is not NULL)

上面操作后还想着使用update来更新

UPDATE t_supplier_address SET t_supplier_address.supplier_id = t_user.supplierId 

FROM t_supplier_address,t_user 

WHERE t_supplier_address.supplier_id = t_user.id

结果sql语句就报错,个人猜测是/*更新 supplier_id即为要更新值又作为查询条件,行不通*/

最后还是没有完成,行不通,重回头来来尝试一个sql语句完成,

最后最后,哈哈,请示高人呗,

上来三下五去二就写完了,我顿时傻眼了

insert into t_supplier_address

SELECT s.id `id`,u.supplierId `supplier_id`,s.aid `aid`,s.provinceName `provinceName`,s.cityName `cityName`,s.areaName `areaName`,s.address `address`,s.`name` `name`,s.phone `phone`,

    s.order_no `order_no`,s.companyname `companyname`,s.tel `tel`,s.returned `returned`,s.send `send`,s.postcode `postcode`,s.comments `comments`

FROM t_user u 

INNER JOIN t_shipping_address s ON(u.id=s.user_id)

WHERE u.type in (2,3) AND u.supplierId is not NULL;

我需要t_user中的supplierId字段,就应该把t_user 作为主表,然后关联t_shipping_address表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: