如何在单个查询中找到结果
我有以下2个表格:
master_data_values
表具有master_data
表的外键。
结合我想要的2个表格" 价值" (来自master_data_value)根据3个参数来考虑 - 每个" 键"(来自master_data表)的account_id,specility_id,user_id。
现在我有以下优先级
1.user_id
2.account_id
3.specility_id
我将根据请求向我发送以上3个参数的单个查询。
现在假设:
如果请求参数不匹配任何内容,那么它应该返回值为所有NULL'
示例结果
我正在使用user_id = 67和specility_id = 55以及account_id = 4
进行查询然后我的结果将返回所有master_data_values,如下所示
现在这里的密钥 GET_DATA 我得到的值是,而 PUT_DATA 得到的值否。这里对于GET_DATA,对于我提供的值,user_id,account_id,specility_id没有匹配条件。所以它从master_data_values表中获取值,该值全部设置为null。而对于 PUT_DATA ,它与user_id匹配,因此它取值" 否"
第二个例子
假设我的查询参数是account_id = 1,specility_id = 2且user_id = null
这里为GET_DATA我得到了值YES。并且对于PUT_DATA得到值是
这里有GET_DATA的2个匹配标准,即account_id和specility_id。但是根据偏好,它花了分配给account_id的值,它是"是"。
注意 - 我使用的是mysql 5.7
用于创建表和示例数据的参考脚本请按顺序执行它们。
CREATE DATABASE `test_schema` ;
CREATE TABLE `test_schema`.`master_data` (
`master_data_id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(45) NOT NULL,
PRIMARY KEY (`master_data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test_schema`.`master_data` (`key`) VALUES ('GET_DATA');
INSERT INTO `test_schema`.`master_data` (`key`) VALUES ('PUT_DATA');
CREATE TABLE `test_schema`.`master_data_values` (
`master_data_value_id` INT(11) NOT NULL AUTO_INCREMENT,
`master_data_id` INT(11) NOT NULL,
`value` VARCHAR(45) NULL,
`account_id` INT(11) NULL,
`specility_id` INT(11) NULL,
`user_id` INT(11) NULL,
PRIMARY KEY (`master_data_value_id`),
INDEX `fk_master_data_values_1_idx` (`master_data_id` ASC),
CONSTRAINT `fk_master_data_values_1`
FOREIGN KEY (`master_data_id`)
REFERENCES `test_schema`.`master_data` (`master_data_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
INSERT INTO `test_schema`.`master_data_values` (`master_data_id`, `value`, `account_id`) VALUES ('1', 'YES', '1');
INSERT INTO `test_schema`.`master_data_values` (`master_data_id`, `value`, `specility_id`) VALUES ('1', 'NO', '2');
INSERT INTO `test_schema`.`master_data_values` (`master_data_id`, `value`) VALUES ('1', 'YES');
INSERT INTO `test_schema`.`master_data_values` (`master_data_id`, `value`) VALUES ('2', 'YES');
INSERT INTO `test_schema`.`master_data_values` (`master_data_id`, `value`, `user_id`) VALUES ('2', 'NO', '67');