获取另一个表时的Mysql案例

时间:2016-04-13 07:17:12

标签: mysql case

我有两个表,一个是日志详细信息,另一个是用户名列表。 我可以使用“INNER JOIN user_tbl ON log_user_id=user_id”但我也有一个超级用户ID是异常,并且此异常用户不在用户表中。我在后台使用这个用户与数据库的关系是这个用户的级别,如9999。

如何将超级用户显示为“监督”之类的名称?

示例sql:

表结构是:

CREATE TABLE `user_list_tb` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(40) COLLATE utf8_turkish_ci NOT NULL,
  `user_pwd` varchar(40) COLLATE utf8_turkish_ci NOT NULL,
  `user_level` int(11) NOT NULL DEFAULT '0',
  `user_owner_id` int(10) unsigned NOT NULL,
  `user_datetime` datetime NOT NULL,
  `user_change_pwd` tinyint(1) DEFAULT NULL,
  `user_pwd_try` int(3) unsigned DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `user_name_UNIQUE` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci;



CREATE TABLE `log_system_tb` (
  `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `log_act_name` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  `log_user_id` int(10) unsigned NOT NULL,
  `log_datetime` datetime NOT NULL,
  `log_message` varchar(256) COLLATE utf8_turkish_ci DEFAULT NULL,
  PRIMARY KEY (`log_id`)
) ENGINE=InnoDB AUTO_INCREMENT=49720 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci;




SELECT

log_id,
log_act_name,
log_user_id,
user_name,
log_datetime,
log_message 

from log_system_tb

JOIN user_list_tb
ON (log_user_id=user_id) 

where log_datetime>="2016-04-01 00:00:00" 
 and 
log_datetime<="2016-04-14 00:00:00" 

order by log_id desc limit 1000;

祝你好运

穆罕默德

2 个答案:

答案 0 :(得分:1)

你可以这样做:

(user_id = 9999然后'监督'结束时的情况)

答案 1 :(得分:1)

您需要使用左连接,因为user_list中没有与主管的已记录事件对应的行。另请参阅下面的案例陈述。

SELECT

log_id,
log_act_name,
log_user_id,
(case when user_id=9999 then 'Supervisory' ELSE user_name END),
log_datetime,
log_message 

from log_system_tb

LEFT JOIN user_list_tb
ON (log_user_id=user_id) 

where log_datetime>="2016-04-01 00:00:00" 
 and 
log_datetime<="2016-04-14 00:00:00" 

order by log_id desc limit 1000;