0
我有一個查詢使用決策表根據多個條件進行決策。在決策表中實現規則的補充SQL
假設這裏我需要知道一個結果(是或否),具體取決於一個人擁有的屬性如表所示。
DROP TABLE IF EXISTS `tbl_decision`;
CREATE TABLE `tbl_decision` (
id_rule INT NOT NULL primary key AUTO_INCREMENT,
rule_name VARCHAR(25) NOT NULL,
minVal INT NOT NULL,
maxVal INT NOT NULL,
decision CHAR(1) NOT NULL,
CONSTRAINT `uc_decision` UNIQUE (`id_rule`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Insert into `tbl_decision` VALUES
(1, 'WEIGHT' , 60 ,100 ,'Y'),
(2, 'HEIGHT' , 0 ,170 ,'Y'),
(3, 'Special rate', 10 ,30 ,'Y'),
(4, 'Consumption' , 0 ,3300,'N');
這裏是我比較表:
DROP TABLE IF EXISTS `tbl_guy`;
CREATE TABLE `tbl_guy` (
id_guy INT NOT NULL primary key AUTO_INCREMENT,
guy_name VARCHAR(25) NOT NULL,
weight INT NOT NULL,
height INT NOT NULL,
rate INT NOT NULL,
consumption INT NOT NULL,
CONSTRAINT `uc_guy` UNIQUE (`id_guy`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Insert into `tbl_guy` VALUES
(1, 'John' , 200,220,10,1000),
(2, 'Mary' , 100,160,11,5100),
(3, 'Diana' , 80 ,155,19,4000),
(4, 'Ruthanne' , 82 ,165, 5,2000);
的決定,確定由下面的查詢。
SELECT * FROM
(
SELECT id_guy,decision,
CASE WHEN rule_name = 'WEIGHT' THEN tbl_guy.weight
WHEN rule_name = 'HEIGHT' THEN tbl_guy.height
WHEN rule_name = 'Special rate' THEN tbl_guy.rate
WHEN rule_name = 'Consumption' THEN tbl_guy.consumption
END AS testQnty, rule_name, minVal, maxVal
FROM tbl_guy CROSS JOIN tbl_decision
) t
WHERE minVal <= testQnty AND testQnty < maxVal
ORDER BY id_guy;
我使用最小值和最大值來判斷是否是,但是我不知道如何定義相反的規則。例如我定義:
(3, '特別率',10,30, 'Y')
是肯定的,如果在字段率人值是10 30之間和
但場消費,如果它在0和3300之間決定是否
(4,'消費',0,3300,'N');
我知道你可以使用這樣 如果0 <= x <= 3300
補充將成爲x < 0 AND x > 3300
總是相反的規則,但如何啓用上查詢?