编写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表
接下来就是编写了,最重要的就是选定:主表
这个很很重要,主表选错了,可能就是无解或者就是写出来的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表
相关文章推荐
- jsp+javabean开发模式下,数据库sql语句的编写规范
- sql语句编写技巧
- 哪位帮我看看这个SQL语句错在什么地方,总是提示我insert into语句的语法错误[呵呵遇到了同样的问题]
- 不当编写SQL语句导致系统不
- 数据库架构更新Sql语句编写规范
- SQL语句编写注意问题(转载:Ayuan)
- sql语句as是什么意思
- 在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- sql语句中 + 号是什么意思
- SQL语句因编写不当可能导致系统不安全
- 不当编写SQL语句导致系统不安全
- oracle用什么SQL语句判断表存不存在
- oracle用什么SQL语句判断表存不存在
- 在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- SQL SERVER字符串前加N,什么含义?,SQL语句里nchar类型的字段我不想加N,怎么办?
- 数据库架构更新Sql语句编写规范
- sql语句的标准语法是什么?
- 一个sql语句的编写 写出不及格门数大于等于2的学生的姓名和平均成绩
- SQL语句在什么情况下使用全表扫描?
- 不当编写SQL语句导致系统不安全