簡體   English   中英

評估一列,使其等於某個值,但不等於其他值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM