Mysql获取常见记录和不常见记录


Mysql fetch records common records as well uncommon records

我有5个表(amazonebayopencartsearsjet)我想要第一优先级的所有表中的公共记录,然后是两个ya三个表中任何一个的公共记录。

我的表格和数据如下:

CREATE TABLE IF NOT EXISTS `amazon` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a_upc` varchar(50) DEFAULT NULL,
  `a_sku` varchar(50) DEFAULT NULL,
  `a_title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `amazon`
--
INSERT INTO `amazon` (`id`, `a_upc`, `a_sku`, `a_title`) VALUES
(1, 'upc_a', 'sku1', 'title_a'),
(2, 'upc1', 'sku_a', 'title_a_1');
CREATE TABLE IF NOT EXISTS `jet` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `j_upc` varchar(50) DEFAULT NULL,
  `j_sku` varchar(50) DEFAULT NULL,
  `j_title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `jet`
--
INSERT INTO `jet` (`id`, `j_upc`, `j_sku`, `j_title`) VALUES
(1, 'upc1', 'sku_j', 'title_j'),
(2, 'upc_j', 'sku_j_1', 'title1');
CREATE TABLE IF NOT EXISTS `ebay` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `e_upc` varchar(50) DEFAULT NULL,
  `e_sku` varchar(50) DEFAULT NULL,
  `e_title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `ebay`
--
INSERT INTO `ebay` (`id`, `e_upc`, `e_sku`, `e_title`) VALUES
(1, 'upc_e', 'sku1', 'title_e'),
(2, 'upc1', 'sku_e', 'title_e_1'),
(3, 'upc_e_1', 'sku2', 'title1');

CREATE TABLE IF NOT EXISTS `opencart` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `o_upc` varchar(50) DEFAULT NULL,
  `o_sku` varchar(50) DEFAULT NULL,
  `o_title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `opencart`
--
INSERT INTO `opencart` (`id`, `o_upc`, `o_sku`, `o_title`) VALUES
(1, 'upc_a', 'sku1', 'title_o'),
(2, 'upc1', 'sku_o', 'title1');
CREATE TABLE IF NOT EXISTS `sears` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `s_upc` varchar(50) DEFAULT NULL,
  `s_sku` varchar(50) DEFAULT NULL,
  `s_title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `sears`
--
INSERT INTO `sears` (`id`, `s_upc`, `s_sku`, `s_title`) VALUES
(1, 'upc1', 'sku_s', 'title_s'),
(2, 'upc_s', 'sku_s_1', 'title_s_1');

您的表结构不正确,但如果您想要这样的东西,您可以这样做。

select *,count(id) as priority
 from
   (
    select id,c1,c2,c3 from table1 
    union all 
    select id,c1,c2,c3 from table2 
    union all select id,c1,c2,c3 from table3
    ) t1
    groupt by id,c1,c2,c3 order by priority desc

这不是最优化的方式。。

您应该创建一个表,并放置一个类型或表列。