我希望能够使用我的查询选择字段的自定义列表,而不必每次都输入所有字段。
例如,我可能想要:
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;
select *
无法正常工作,因为我仍然想根据我不想显示的字段进行查询我真的不想做存储过程..语法就像
do_my_query('where A>2 and G is not null')
答案 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 *
通常是不好的做法。