簡體   English   中英

如何在 MySQL 中加入多個表?

[英]How to join with multiple tables in MySQL?

表關系的圖像可以在image找到。

-- Table structure for table `area`
CREATE TABLE `area` (
  `area_id` int(10) NOT NULL auto_increment,
  `area_name` varchar(255) NOT NULL,
  PRIMARY KEY  (`area_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `area` (`area_id`, `area_name`) VALUES
(1, 'Area 1'),
(2, 'Area 2'),
(3, 'Area 3'),
(4, 'Area 4');

-- Table structure for table `fruits`


CREATE TABLE `fruits` (
  `fruit_id` int(10) NOT NULL auto_increment,
  `fruit_name` varchar(255) NOT NULL,
  `area_id` int(10) NOT NULL,
  PRIMARY KEY  (`fruit_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;



INSERT INTO `fruits` (`fruit_id`, `fruit_name`, `area_id`) VALUES
(1, 'Apple', 1),
(2, 'Orange', 1),
(3, 'Mango', 2),
(4, 'Apricot', 3);


-- Table structure for table `vegetables`
CREATE TABLE `vegetables` (
  `veg_id` int(10) NOT NULL auto_increment,
  `veg_name` varchar(255) NOT NULL,
  `area_id` int(10) NOT NULL,
  PRIMARY KEY  (`veg_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `vegetables` (`veg_id`, `veg_name`, `area_id`) VALUES
(1, 'Chickpea', 1),
(2, 'Drumstick', 4);

如果我使用以下查詢,我會得到如下輸出

SELECT
    `area`.`area_name` AS AreaName
    ,COUNT(*) AS num
FROM
    `area`
    INNER JOIN `fruits`
        ON (`fruits`.`area_id` = `area`.`area_id`)
    GROUP BY `fruits`.area_id   

UNION ALL

SELECT
    `area`.`area_name` AS AreaName
    ,COUNT(*) AS num
FROM
    `area`

    INNER JOIN `vegetables`  
        ON (`vegetables` .`area_id` = `area`.`area_id`)
    GROUP BY `vegetables`.area_id

AREANAME NUM
區域 1 2
區域 2 1
區域 3 1
區域 1 1
區域 4 1

但我希望輸出是這樣的:

它應該獲取蔬菜和水果中存在的所有區域,如果該區域在水果或蔬菜中重復,它應該通過總計水果和蔬菜的數量來返回 area_id 的總數..所以輸出將如下所示

AREANAME NUM
區域 1 3
區域 2 1
區域 3 1
區域 4 1

您可以在查詢上使用子選擇並使用SUM()添加相同區域的計數

SELECT t.AreaName ,SUM(t.num) num
FROM ( ....) t
GROUP BY t.AreaName

小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM