![](/img/trans.png)
[英]MYSQL: count column if something if another column is equal to something else
[英]Evaluate a column so that it equals something but not something else?
表格:
CREATE TABLE Participation(
ParticipationId INT UNSIGNED AUTO_INCREMENT,
SwimmerId INT UNSIGNED NOT NULL,
EventId INT UNSIGNED NOT NULL,
Committed BOOLEAN,
CommitTime DATETIME,
Participated BOOLEAN,
Result VARCHAR(100),
Comment VARCHAR(100),
CommentCoachId INT UNSIGNED,
CONSTRAINT participation_pk PRIMARY KEY(ParticipationId),
CONSTRAINT participation_ck_1 UNIQUE(SwimmerId, EventId),
CONSTRAINT participation_swimmer_fk FOREIGN KEY(SwimmerId)
REFERENCES Swimmer(SwimmerId),
CONSTRAINT participation_event_fk FOREIGN KEY(EventId)
REFERENCES Event(EventId),
CONSTRAINT participation_coach_fk FOREIGN KEY(CommentCoachId)
REFERENCES Coach(CoachId)
);
CREATE TABLE Swimmer(
SwimmerId INT UNSIGNED AUTO_INCREMENT,
LName VARCHAR(30) NOT NULL,
FName VARCHAR(30) NOT NULL,
Phone VARCHAR(12) NOT NULL,
EMail VARCHAR(60) NOT NULL,
JoinTime DATE NOT NULL,
CurrentLevelId INT UNSIGNED NOT NULL,
Main_CT_Id INT UNSIGNED NOT NULL,
Main_CT_Since DATE NOT NULL,
CONSTRAINT swimmer_pk PRIMARY KEY(SwimmerId),
CONSTRAINT swimmer_level_fk FOREIGN KEY(CurrentLevelId)
REFERENCES Level(LevelId),
CONSTRAINT swimmer_caretaker_fk FOREIGN KEY(Main_CT_Id)
REFERENCES Caretaker(CT_Id)
);
CREATE TABLE Event(
EventId INT UNSIGNED AUTO_INCREMENT,
Title VARCHAR(100) NOT NULL,
StartTime TIME NOT NULL,
EndTime TIME NOT NULL,
MeetId INT UNSIGNED NOT NULL,
LevelId INT UNSIGNED NOT NULL,
CONSTRAINT event_pk PRIMARY KEY(EventId),
CONSTRAINT event_meet_fk FOREIGN KEY(MeetId)
REFERENCES Meet(MeetId),
CONSTRAINT event_level_fk FOREIGN KEY(LevelId)
REFERENCES Level(LevelId)
);
我假設有3張表列出參加活動3而不是活動4的游泳運動員的姓名。
首先,我嘗試了此操作: SELECT s.FName AS "fname", s.LName AS "lname" FROM Swimmer s, Participation p, Event e WHERE s.SwimmerId = p.SwimmerId AND e.EventId = p.EventId AND p.EventId = 3 AND p.EventId != 4;
我已經在網上搜索了一段時間,但是卻找不到確切的類似內容。
這是我找到解決方案的最接近的方法: where子句for等於一個字段,不等於另一個,但是我不能確定我的“ wp_posts.id”和“ wp_term_relationships”會是什么樣。
您可以嘗試一下,伙伴:
SELECT s.FName AS 'fname', s.LName AS 'lname'
FROM swimmer s
INNER JOIN participation p ON p.SwimmerId = s.SwimmerId
-- swimmer(s) that did not participate in event 4
INNER JOIN participation p4 ON p4.SwimmerID = s.SwimmerId
AND p4.EventId != 4
WHERE p.EventId = 3;
這是我得到的解決方案:
SELECT s.FName AS "fname", s.LName AS "lname" FROM Swimmer s
WHERE s.SwimmerId IN (
SELECT DISTINCT p.SwimmerId FROM Participation p WHERE p.EventId = 3
) AND s.SwimmerId NOT IN (
SELECT DISTINCT p.SwimmerId FROM Participation p WHERE p.EventId = 4
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.