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