Mysql在单个查询中获得结果

时间:2016-09-02 07:46:41

标签: mysql sql mysql-5.7

如何在单个查询中找到结果

我有以下2个表格:

enter image description here

enter image description here

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,如下所示 enter image description here

现在这里的密钥 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

那么它应该优先考虑account_id,结果应该是这样的 enter image description here

这里为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');

0 个答案:

没有答案