簡體   English   中英

如何從兩個具有一對多關系的表中獲取聯接數據?

[英]How to get joined data from two tables that have one-to-many relationship?

我有以下兩個表:

CREATE  TABLE IF NOT EXISTS `myDB`.`trips` (
  `IdTrip` INT NOT NULL AUTO_INCREMENT ,
  `IsCancelled` TINYINT NULL DEFAULT 0 ,
  PRIMARY KEY (`IdTrip`) );

CREATE  TABLE IF NOT EXISTS `myDB`.`stats` (
  `IdStat` INT NOT NULL AUTO_INCREMENT ,
  `IdTrip` INT NOT NULL ,
  `DateStat` DATE NULL ,
  PRIMARY KEY (`IdStat`) ,
  INDEX `fk_trips_stats_idx` (`IdTrip` ASC) ,
  CONSTRAINT `fk_trips_stats`
    FOREIGN KEY (`IdTrip` )
    REFERENCES `myDB`.`trip` (`IdTrip` )
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

這種關系是一對多的:一次旅行可能有不同的統計數據。

現在,我想顯示有關從'2015-05-01''2015-05-25'的期間(由DateStat定義)的stats中包含超過1個條目的旅行的所有信息。

如果存在一對一的關系,那么我會以這種方式檢查日期:

DateStat BETWEEN '2015-05-01' AND '2015-05-25'

但我不知道如何為一對多關系制作它,同時還要考慮每次旅行的統計數量。

簡單的GROUP BYHAVING應該足夠了:

SELECT
    trips.IdTrip
    ,trips.IsCancelled
FROM
    trips
    INNER JOIN stats ON stats.IdTrip = trips.IdTrip
WHERE
    stats.DateStat >= '2015-09-01 00:00:00' 
    AND stats.DateStat < '2015-09-26 00:00:00'
GROUP BY
    trips.IdTrip
    ,trips.IsCancelled
HAVING COUNT(*) > 1

這是SQL Fiddle和您的示例數據。 我將查詢中的日期范圍更改為9月,以包含您的示例數據。 如果在問題中將查詢中的日期范圍設置為May,則查詢將不返回任何行,因為數據中現在存在May的行。

暫無
暫無

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

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