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

来源:互联网 发布:淘宝联盟能赚多少钱 编辑:程序博客网 时间:2024/05/14 14:18

首先,弄清楚需求,

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

这个很很重要,主表选错了,可能就是无解或者就是写出来的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表

0 0