デシジョン テーブルを使用して、複数の基準に基づいて意思決定を行うためのクエリがあります。
ここで、表に示すように、人の属性に応じて結果 (Yes または No) を知る必要があるとします。
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 の場合は yes になります
ただし、フィールドの消費については、0 から 3300 の間の決定は NO です
(4、「消費」、0、3300、「N」);
補数を使用して常に反対のルールを作成できることは知っていますが
、クエリでそれを有効にするにはどう0 <= x <= 3300
すれ ばよいですか?x < 0 AND x > 3300