我必须在我的数据库中为远足组织进行查询: - >有多少年龄超过70岁的远足者参加了远足,名为“Pohod na Triglav”由“PlaninskodruštvoPlaninec”组织?MySQL查询帮助远足组织
的关系方案如下:
CREATE TABLE Hikers(
IDHiker INTEGER NOT NULL,
Name VARCHAR(45) NOT NULL,
LastName VARCHAR(45) NOT NULL,
Sex ENUM('male', 'female'),
BirthDay DATE NOT NULL,
Phone VARCHAR(45)
);
//table for joining hikers and hikes (includes foreign keys)
CREATE TABLE Hiker_has_joined_the_Hike(
IDJoin INTEGER NOT NULL,
Hikers_IDHiker INTEGER NOT NULL,
Hikes_IDHike INTEGER NOT NULL
);
CREATE TABLE Hikes(
IDHike INTEGER NOT NULL,
Type_of_hike_IDType_of_hike INTEGER NOT NULL,
Name_Hike VARCHAR(45) NOT NULL,
No_of_available_hikers INTEGER NOT NULL,
Time_of_beginning DATETIME NOT NULL,
Time_of_end DATETIME NOT NULL
);
//table for joining organizations and hikes (includes foreign keys)
CREATE TABLE Organization_organizes_a_Hike(
IDOrganization INTEGER NOT NULL,
Organizations_IDOrganization INTEGER NOT NULL,
Hikes_IDHike INTEGER NOT NULL
);
CREATE TABLE Organizations(
IDOrganization INTEGER NOT NULL,
Title VARCHAR(45) NOT NULL,
Short_title VARCHAR(45),
E_mail VARCHAR(45) NOT NULL,
Phone VARCHAR(45) NOT NULL
);
到目前为止,我得到了这一点,但它会显示他们的2,但只有一个应该在那里..:
SELECT DISTINCT COUNT(Hikers.IDHiker) AS No_of_joined_above_70
FROM Hikers, Hiker_has_joined_the_Hike, Hikes, Organization_organizes_a_Hike, Organizations
WHERE ((Hikers.IDHiker = Hiker_has_joined_the_Hike.Hikers_IDHiker) && (Hiker_has_joined_the_Hike.Hikes_IDHike = Hikes_IDHike) && (Hikes_IDHike = Organization_organizes_a_Hike.Hikes_IDHike) && (Organization_organizes_a_Hike.Organizations_IDOrganization = Organizations_IDOrganization) && ((YEAR(CURDATE()) - YEAR(Hikers.BirthDay))>70) && (Hikes.Name_Hike='Pohod na Triglav') && (Organizations.Title='Planinsko društvo Planinec'));
对不起大家..我上传的查询是在我的语言..我翻译它为更好地了解现在..因为我做了创建
乍一看,我说你会想首先使用正确的连接。这可能会解决您的问题(然后您可以安全地删除DISTINCT语句)。 – Sturgus
Sturgus,我在想同样的事情,但我看到很少的参照完整性。 – tadamhicks
使用INNER JOIN并在查询中提及正确的表和列名 –