[英]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 BY
與HAVING
應該足夠了:
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.