如何编写一个引用表中字段的MySQL函数?

时间:2018-04-26 10:46:23

标签: mysql sql

我有一个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函数?

1 个答案:

答案 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无法做的是返回符合条件的行。鉴于您声明函数返回标量值,这似乎不是您的意图。