查询报错1093 - You can‘t specify target table ‘da‘ for update in FROM clause、左连接,创建视图,not in使用

本文深入探讨了SQL查询的常见问题及解决策略,包括左连接、更新语句、NOT IN用法及视图创建等,强调了多表连接查询的效率优势,并提醒在数据库设计时预留字段的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库sql语句中部分问题总结

  • 多个数据库查询,使用做连接查询:有a,b连个表 left join on(连接条件)
    左连接显示,两个表项目都显示,但是左边有的,但右边没就显示为空,一切以左边为主
SELECT a.id,a.name,a.age,b.money,b.number
from person AS  a 
 LEFT JOIN   log  as b 
 ON (a.id=b.id) 
 WHERE a.date=b.date AND (a.type=1 or a.type=2 )  GROUP BY a.id
  • 查询报错:You can’t specify target table ‘da’ for update in FROM clause
    报错原因:不能在FROM子句中为更新指定目标表’da’
    错误语句:直接从查询语句中获取数据,这样是不行的
    not in: 表示除过结果集里面的数据
UPDATE  manager
SET  number='0',age='0'
WHERE 
id   not   in
(SELECT  a.DRAWER_UUID  from  drawermanager  as  a,card_account  AS  b   WHERE a.id  =b.id 
GROUP  BY  a.id)

正确写法:需要查询语句查询出来的结果as为一个表,然后在这个表里查询需要的信息,就可以了

UPDATE  manager
SET  number='0',age='0'
WHERE 
id   not   in
(SELECT  hebing.id FROM 
(SELECT  a.DRAWER_UUID  from  drawermanager  as  a,card_account  AS  b   WHERE a.id  =b.id 
GROUP  BY  a.id)
 AS  hebing)
  • 建立视图:跨库查询:需要在标签加上库的名字然后.出表如下
    在mysql工具navicat中可以直接建立视图:
    sql语句,但需要给查询出的语句要显示的属性as一下: NewLocal.rs AS nrs
SELECT
log.no  AS no,nrs .name AS NAME 
FROM 
logtime  AS log LEFT JOIN  NewLocal.rs AS nrs  ON(log .NO=nrs.NO)
  • 部分经验总结
    • 对于多表来讲连接查询速率大于纯select查询,最终可以直接创建一个视图放自己需要的信息
    • 创建数据库表一定要预留字段,因为一定有大用出
      后续接着补充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值