hive与mysql使用left..join..on.. and .. 条件 区别


  1. hive

测试数据

CREATE TABLE users(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
CREATE TABLE dept(id int,user_id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

INSERT INTO users
SELECT 1,'张三'
union all 
SELECT 2,'李四'
union all 
SELECT 3,'王二';

INSERT INTO dept
SELECT 1,1,'主管'
union all 
SELECT 2,3,'员工';

SELECT * from users;

SELECT * from dept;
SELECT * from users u LEFT  JOIN dept d on u.id=d.user_id and u.id>1;

SELECT * from users u LEFT  JOIN dept d on u.id=d.user_id and d.id>1

  1. mysql

测试数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (1, '张三');
INSERT INTO `user` VALUES (2, '李四');
INSERT INTO `user` VALUES (3, '王二');

-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of dept
-- ----------------------------
BEGIN;
INSERT INTO `dept` VALUES (1, 1, '主管');
INSERT INTO `dept` VALUES (2, 3, '员工');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

测试sql

SELECT * from user u left  JOIN dept d on u.id=d.user_id and u.id>1

SELECT * from user u left  JOIN dept d on u.id=d.user_id and d.id>1

结论:后的and条件只对右表(被驱动表)起作用,mysql 和hive 一样


文章作者: chinasun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 chinasun !
  目录