首页 > 解决方案 > Mysql 不查询

问题描述

我有两张这样的桌子。我想做一个查询,即 Select a Dvd only has Indian subtitle。

  CREATE TABLE dvd(
 `Id` INT NOT NULL,
 `Name` VARCHAR(45) NULL,
 `Category` VARCHAR(45) NULL,
  `Price` INT NOT NULL,
  PRIMARY KEY (`Id`));  

 CREATE TABLE Subtitles(
 `Id` INT NOT NULL,
 `Language` VARCHAR(45) NULL);

我正在尝试这样做,但此查询选择每张 DVD 都有印度字幕。

SELECT Name FROM DvD JOIN Subtitles 
ON  Dvd.Id=Subtitles.ID 
where Language='Indian' GROUP BY Name HAVING COUNT(*) = 1;

标签: mysqlsql

解决方案


该查询不起作用,因为该where子句在分组之前应用。所以你得到了所有的行Language='Indian',然后,每个组只有一行。

一个技巧是检查最大和最小语言是否相同(意味着组中只有一行),并且它们是Indian. 请注意,where应删除该子句:

SELECT   d.id
FROM     dvd d
JOIN     subtitles s ON  d.id = s.id
GROUP BY id
HAVING   MAX(language) = MIN(language) AND MAX(language) = 'Indian'

推荐阅读