mysql查询加入五个表

时间:2016-11-02 03:17:30

标签: mysql sql

想要加入表格

我有五张这样的桌子

表-1 命名为软件

CREATE TABLE IF NOT EXISTS `software` (
  `software_name` varchar(50) NOT NULL,
  `software_version` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `software` (`software_name`, `software_version`) VALUES
('freemap', '1.0'),
('freegps', '1.2');

enter image description here

表格2 命名为 cms

CREATE TABLE IF NOT EXISTS `cms` (
  `cms_name` varchar(50) NOT NULL,
  `cms_product` varchar(50) NOT NULL,
  `cms_version` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `cms` (`cms_name`, `cms_product`, `cms_version`) VALUES
('org:freemap:1.0', 'freemap', '1.0'),
('org:freegps:1.0', 'freegps', '1.2');

enter image description here

表-3 命名为 cms_to_sve

CREATE TABLE IF NOT EXISTS `cms_to_sve` (
  `cms_id` varchar(50) NOT NULL,
  `sw_vul_id` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `cms_to_sve` (`cms_id`, `sw_vul_id`) VALUES
('org:freemap:1.0', '423'),
('org:freemap:1.0', '424'),
('org:freemap:1.0', '425'),
('org:freemap:1.0', '426'),
('org:freegps:1.2', '940'),
('org:freegps:1.2', '941');

enter image description here

表格4 命名为 software_details

CREATE TABLE IF NOT EXISTS `software_details` (
  `sw_id` varchar(50) NOT NULL,
  `sve_id` varchar(50) NOT NULL,
  `score` varchar(50) NOT NULL,
  `ratio` varchar(50) NOT NULL,
  `swe_id` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `software_details` (`sw_id`, `sve_id`, `score`, `ratio`, `swe_id`) VALUES
('423', '2001-1991', '5', 'high', '320'),
('424', '2004-1996', '7.5', 'medium', '460'),
('425', '2008-9001', '8', 'low', '122'),
('426', '2012-0002', '4', 'high', '128'),
('940', '2003-1993', '6', 'medium', '424'),
('941', '2006-1994', '3', 'high', '112');

enter image description here

表-5 命名为 swe

CREATE TABLE IF NOT EXISTS `swe` (
  `swe_name` varchar(50) NOT NULL,
  `swe_id` varchar(50) NOT NULL,
  `swe_des` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `swe` (`swe_name`, `swe_id`, `swe_des`) VALUES
('ref software', '320', 'hello'),
('ref complicated', '480', 'hi welcome'),
('ref contact', '122', 'how are you'),
('ref admire', '123', 'who is that'),
('ref super', '424', 'well join us'),
('ref nice', '112', 'cheers');

enter image description here

我想加入这五个表

我有一些提示

  • 需要比较表1 表2 (即表格 软件和表 cms
  • software_name cms_product 进行比较 使用 cms_version
  • software_version
  • 这些应与cms_name
  • 相关
  • 第二个表格列 cms_name 必须与第三个表格一起加入 表格常用列 cms_id
  • 第三个表 cms_id 必须等于 sw_vul_id 然后加入第四张表
  • 现在使用 sw_vul_id 连接第三个表中的第四个表是相等的 sw_id 并获取剩余的列值
  • 通过 swe-id 加入第五张桌子和第四张桌子,然后获取另一张桌子 列值

最后我希望得到像这样的输出

enter image description here

我需要查询。

1 个答案:

答案 0 :(得分:1)

就像PeteCon在评论中说的那样,可以使用左连接,希望这会有所帮助。

   select tbl1.software_name, tbl1.software_version, tbl4.sve_id, tbl4.score, tbl4.ratio, tbl5.swe_id, tbl5.swe_name, tbl5.swe_des
     from software tbl1
left join cms tbl2 on tbl1.software_name = tbl2.cms_product and tbl1.software_version = tbl2.cms_version
left join cms_to_sve tbl3 on tbl2.cms_name = tbl3.cms_id
left join software_details tbl4 on tbl3.sw_vul_id = tbl4.sw_id
left join swe tbl5 on tbl4.swe_id = tbl5.swe_id

http://sqlfiddle.com/#!9/3735e7/1

我认为您的一些示例数据不足以获得您想要的结果,但在您的真实数据库中,查询应该为您提供您想要的结果。