mysql命令行有宏吗?

时间:2014-10-14 02:43:49

标签: mysql

我希望能够使用我的查询选择字段的自定义列表,而不必每次都输入所有字段。

例如,我可能想要:

select A, A+B, (A div 2) / C, concat_ws(' ', A, B, C, D)
from my_table where blahblahblah

我要用许多不同的条件取代blahblahblah但是有办法只输入

select MY_CUSTOM
from my_table where A > 2 and G is not null;
    来自视图的
  1. select *无法正常工作,因为我仍然想根据我不想显示的字段进行查询
  2. 我真的不想做存储过程..语法就像

    do_my_query('where A>2 and G is not null')
    

2 个答案:

答案 0 :(得分:1)

不在mysql命令程序本身,但没有什么可以阻止你使用(例如)shell来提供该功能,例如(在bash中):

for name in Pax Bob ; do
    echo "select * from people where name = '${name}'" | mysql ...
done

在您的具体情况下,您可以选择类似这样的shell脚本smc

echo "select MY_CUSTOM from my_table $1" | mysql --user=x --password=y db

并将其命名为:

smc "where A>2 and G is not null"

尽管添加一些调试可能是谨慎的,并且确保只向那些您不信任SQL注入攻击的人授予访问权限: - )

答案 1 :(得分:1)

不,直接回答你的问题,MySQL中没有宏。

如你所知,最接近的是VIEW。但是你必须在视图的select-list中包含你可能想要编写条件的所有裸列。然后在视图上使用SELECT *;只选择你想要的列。

CREATE VIEW my_table_enhanced AS
 SELECT *, A+B AS expr1, (A DIV 2) / C AS expr2, CONCAT_WS(' ', A, B, C, D) AS expr3
 FROM my_table;

然后

SELECT expr1, expr2, expr3
FROM my_table_enhanced
WHERE ...conditions...

无论如何,在生产代码中使用SELECT *通常是不好的做法。