过程/别名[一部分]有点长的MySQL命令?

问题描述 投票:0回答:1

不是“别名”,但类似...

我正在使用不完整的 MySQL 数据库,从外部参考添加重复的手动更新。它进展缓慢,我希望能够简化到目前为止我已经使用了数十次的 SELECT。我前面还有几千个这样的东西。

我已经看到了创建过程的建议,但由于我试图“别名”部分查询,所以我可能问了错误的问题。

我想浓缩一下:

SELECT book, fulltitle, author, num, lastread, category FROM books 

...类似这样的事情:

sBk

所以我输入

sBk WHERE book="success";
然后 MySQL 执行:

SELECT book, fulltitle, author, num, lastread, category FROM books WHERE book="success";

一致性,R.I.P.

在我的数据中,大多数作者都是未定义的——我的任务是解决这个问题。所以我就在我的参考资料中查找该作者的书籍,然后更新记录。

有些书的名字是可以预见的,例如john1、john2、john3...其他则不是,例如jrs2、smithj9、fourteen1、AllYourBase 等。因此,命令通常如下所示:

SELECT book, fulltitle, author, num, lastread, group FROM books WHERE book like \
  "artp1%" OR book LIKE "aod%" OR book LIKE "fatal%" OR book LIKE "outside%" OR \
  book LIKE "geo-cache%" OR book LIKE "frostbite" OR book LIKE "quickb3%" OR book \
  LIKE "instantcof%" OR book = "sevenmile" OR book = "uberfast";

所以我点击向上箭头,删除第一部分,然后输入

author=
得到这个:

UPDATE books SET author="John Smith" WHERE book LIKE (everything above)";

查找和书籍/作者关联是手动的,我无法更改它。但是,一旦我得到与所有正确书籍匹配的 SELECT 语句,就必须有一种更智能的方法来执行这些数据更新。


我尝试过的 - 和注意事项

  • books
    表有几十列,或者我只是
    select *

  • 我可以从之前的选择中复制/粘贴,但我用鼠标很马虎,使它像按删除键一样慢。

我尝试创建一个过程,但我无法让它接受部分命令 - 并且错误不是很具有描述性 - 有没有办法纠正我在这里所做的事情?

CREATE PROCEDURE sBk()  BEGIN SELECT book, fulltitle, author, num, lastread, category from books END;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that \
  corresponds to your MySQL server version for the right syntax to use near '' at line 1

匹配一本书很简单:点击上一个 UPDATE 命令的向上箭头,编辑,继续。然而,许多命令的长度和复杂性几乎消除了简单 [UpArrow] 相对于上一条语句的优势。

mysql command-line-interface alias
1个回答
0
投票

语法错误的原因是您没有设置

DELIMITER
,并且您的过程包含
BEGIN...END
块。有关详细信息,请阅读 https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html

定义存储过程后,您可以这样调用它:

mysql> CALL sBk();

但这是你可以调用它的唯一方法。不能将 WHERE 子句添加到 CALL 语句。它不是查询的别名。

您可以考虑使用 VIEW 而不是过程。

对于使用向上箭头编辑上一条语句的困难,您可能想在 mysql 客户端中使用

edit
\e
命令,而不是向上箭头。此命令打开一个文本编辑器,例如
vi
(或任何您的
EDITOR
VISUAL
环境变量名称)。这使您可以更好地控制如何编辑 SQL 语句。

© www.soinside.com 2019 - 2024. All rights reserved.