我必須在我的數據庫中爲遠足組織進行查詢: - >有多少年齡超過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並在查詢中提及正確的表和列名 –