我有一个SQL:
SELECT * FROM table WHERE col_1 = a OR col_2 = a OR col_3 = a
我不想输入很多col_1 = a OR col_2 = a OR col_3 = a
,所以我创建了一个函数:
CREATE FUNCTION is_col_equal(a VARCHAR(20))
RETURNS BOOLEAN
RETURN col_1 = a or col_2 = a or col_3 = a
但是当我执行SELECT * FROM table WHERE is_col_equal(a)
时,它会提供Unknown column 'col_1' in 'field list'
。
那么,如何编写一个从表中引用字段的MySQL函数?
答案 0 :(得分:1)
您可以参考该列。但是你必须定义函数的功能。如果您希望函数在三列的任何为a
时返回一个值,那么您可以将其计算为一个值并将其返回:
CREATE FUNCTION is_col_equal(in_a VARCHAR(20))
RETURNS BOOLEAN
BEGIN
SELECT @bool = MAX(col_1 = in_a or col_2 = in_a or col_3 = in_a)
FROM t;
RETURN @bool
END;
MySQL无法做的是返回符合条件的行。鉴于您声明函数返回标量值,这似乎不是您的意图。