2010-03-28 56 views
1

我有一个表与主键(ColumnA,ColumnB)。我想创建一个函数或过程,当传递两个整数时,会在表中插入一行,但要确保最大的整数始终进入ColumnA,而较小的整数进入ColumnB。设置主键与两个整数

因此,如果我们有SetKeysWithTheseNumbers(17,19)将返回

|-----------------| 
|ColumnA | ColumnB| 
|-----------------| 
|19  | 17  | 
|-----------------| 

SetKeysWithTheseNumbers(19,17)将返回同样的事情

|-----------------| 
|ColumnA | ColumnB| 
|-----------------| 
|19  | 17  | 
|-----------------| 

回答

3

使用:

INSERT INTO your_table 
    (COLUMN_A, COLUMN_B) 
VALUES(GREATEST(@param_a, @param_b), 
     LEAST(@param_a, @param_b)) 

参考:

+0

这就是我一直在寻找的单词。我无法弄清楚相当于最大值和最小值。 – 2010-03-28 03:20:05

0

下面是一个存储过程

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `SetKeysWithTheseNumbers` $$ 
CREATE PROCEDURE `SetKeysWithTheseNumbers` (

n1 integer, 
n2 integer 


) 
BEGIN 

declare n3 integer; 
declare n4 integer; 

if(n1 > n2) then 
set n3=n1; 
set n4=n2; 
else 
set n3=n2; 
set n4=n1; 
end if; 

insert into mytable values(n3,n4); 



END $$ 

DELIMITER ; 
+0

这似乎是伎俩,谢谢。我以为我会使用两个插入语句,而不是分配n3,n4。 – 2010-03-28 02:41:36

0

你可以尝试triggers

BEFORE UPDATE事件
delimiter // 

CREATE TRIGGER greater_ColA_table 
    BEFORE INSERT ON table 
    FOR EACH ROW 
    BEGIN 
    DECLARE a INTEGER; 
    IF NEW.ColumnA < NEW.ColumnB THEN 
     SET a=NEW.ColumnA; 
     SET NEW.ColumnA=NEW.ColumnB, NEW.ColumnB=a; 
    END IF; 
    END // 

delimiter ; 

重复。