mysql 查询dual报错_MYSQL基础02(查询)
1.DUAL
DUAL是一个虚拟表,即该
查询是很大的一块,所以这里我只会写mysql的特点,就我目前使用的情况Mssq子查询,MYSQL对标准SQL是比较支持,如果是新手的话,建议去w3school 学习标准SQL. 1.DUAL DUAL是一个虚拟表,即该表是不存在的,用于直接select 标量时,使语句看起来符合sql规范 -- MSSQL select 1,'A' -- Oracle中dual 不可缺少 select 1,'A' from DUAL -- mysql 以下2种格式都支持 select 1,'A'; select 1,'A' from DUAL; 2.LIMIT 相对MSSQL来说,MYSQL并没有TOP关键字,但有LIMIT,而且效率更高且更灵活 SELECT * FROM usr LIMIT 1; -- LIMIT 1 的意思是取1条记录, MYSQL在取完1条记录后将不再操作. SELECT * FROM usr LIMIT 0,2; -- LIMIT 0,2的意思是从第一行(包括第一行)开始,取2条记录 SELECT * FROM usr WHERE u_id IN (SELECT u_id FROM usr WHERE dept='信息部' LIMIT 1); -- 该语句执行时,MYSQL会报错,意思是不能在子查询中使用limit -- 解决办法,将使用limit的语句再套一层表即可;如下: SELECT * FROM usr WHERE u_id IN (SELECT * FROM (SELECT u_id FROM usr WHERE dept='信息部' LIMIT 1)aa) PS:MSSQL中使用TOP,数据库会先排序,然后再返回数据,因此limit的效率比较高 3.子查询的update错误 UPDATE usr SET usr_name='匿名' WHERE u_id IN (SELECT u_id FROM usr WHERE dept='信息部') -- 语句报错,大概意思是修改表不能使用自身 -- 解决方法,跟上面一样,再套一层表即可 UPDATE usr SET usr_name='匿名' WHERE u_id IN (SELECT * FROM (SELECT u_id FROM usr WHERE dept='信息部')aa) (编辑:应用网_常德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- tsql – T-SQL – 如何交换行和列
- SQL SERVER数据库删除LOG文件和清空日志的方案
- 使用.NET或MS SQL模拟MySql的密码()加密
- sql-server – 如何使用TSQL识别记录中的记录模式序列?
- MySQL 字符串截取函数
- sql-server – 为什么我需要两个SQL Server Service Broker
- sql – regex_substr中的connect by子句
- 对于teradata数据库,Hibernate @formula不支持将Cast()作为
- sql-server – 如何在表引用自身时编写查找所有循环引用的查
- sql-server-2008 – 传递给SQL Server的查询已损坏