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

    技术2022-07-20  81

    数据库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查询,最终可以直接创建一个视图放自己需要的信息创建数据库表一定要预留字段,因为一定有大用出 后续接着补充
    Processed: 0.014, SQL: 10