科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道5.4 MySQL缺乏的功能

5.4 MySQL缺乏的功能

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

下列功能在当前的MySQL版本是没有的。对于一张优先级表指出何时新扩展可以加入MySQL, 你应该咨询在线MySQL TODO 表。这是本手册最新的TODO表版本。见F 我们想要在未来加入到MySQL的事情列表(TODO)。

作者:天极软件 来源:天极软件 2008年1月23日

关键字: 查询 功能 MySQL

  • 评论
  • 分享微博
  • 分享邮件

下列功能在当前的MySQL版本是没有的。对于一张优先级表指出何时新扩展可以加入MySQL, 你应该咨询在线MySQL TODO 表。这是本手册最新的TODO表版本。见F 我们想要在未来加入到MySQL的事情列表(TODO)。

5.4.1 子选择

MySQL中下列语句还不能工作:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);

然而,在很多情况下,你可以重写查询,而不用子选择:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

对于更复杂的子查询,通常你可以创建临时的表保存子查询。然而在一些情况下,这种选择将行不通。最经常遇到的情形是DELETE语句,对于它标准SQL不支持联结(join)(除了在子选择)。对于这种情况,有2个可用选择,直到子选择被MySQL支持。

第一个选择是使用一种过程化的程序语言(例如Perl或PHP)来提交一个SELECT查询获得要被删除记录主键,并然后使用这些值构造DELETE语句(DELETE FROM ... WHERE ... IN (key1, key2, ...))。

第二个选择是使用交互式SQL自动构造一套DELETE语句,使用MySQL扩展CONCAT()(代替标准||操作符)。例如:

SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';')
  FROM tab1, tab2
 WHERE tab1.col1 = tab2.col2;

你可以把这个查询放在一个脚本文件并且从它重定向输入到mysql命令行解释器,将其输出作为管道返回给解释器的第2个实例:

prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb

MySQL仅支持INSERT ... SELECT ...REPLACE ... SELECT ...,独立的子选择将可能在3.24.0得到,然而,在其他环境下,你现在可以使用函数IN()

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章