SQL-如何替换SELECT子句检索到的结果



假设您有两个表,

Citizen
Admin

管理员本质上是一个公民,所以管理员在公民PK中有一个FK。接下来,当创建公民条目时,条目记录管理员输入的条目。

公民包括公民姓名等详细信息,而管理员包括与公民详细信息无关的其他详细信息。

所以我有一个问题,

SELECT ctzName, ctzEnteredByID
FROM Citizen
INNER JOIN Admin
ON ctzPK = admPK
WHERE ctzPK = 2

此查询返回Citizen的名称和创建Citizen条目的管理员的ID。在这种情况下,ID将是管理员的admPK/ctzPK。举个例子,假设Citizen表有两个条目,

ctzPK = 1, ctzName = Chris, ctzEnteredByID = 0
ctzPK = 2, ctzName = John, ctzEnteredByID = 1

然后这个查询返回,

John, 1

但是,我想打印输入它的管理员的姓名。所以我希望我的结果是

John, 1, Chris

我尝试过SELECT将这个值作为WHERE中的一个条件,但没有成功。你是怎么做这种替换的?

只需再添加两个INNER JOIN(并别名现有的表引用(即可获得subjectCitizen.ctzEnteredByID的数据。

像这样:

SELECT
subjectCitizen.ctzName        AS "Subject Citizen Name",
subjectCitizen.ctzEnteredByID AS "Subject Citizen's data entered by (ID)",
makerCitizen.ctzName          AS "Subject Citizen's data entered by (Name)"
FROM
-- Subject data:
dbo.Citizen AS subjectCitizen
INNER JOIN dbo.Admin AS subjectAdmin ON
subjectCitizen.ctzPK = subjectAdmin.admPK
-- Subject's creator:
INNER JOIN dbo.Admin AS maker ON
maker.admPK = subjectCitizen.ctzEnteredByID
INNER JOIN dbo.Citizen AS makerCitizen ON
maker.admPK = makerCitizen.ctzPK
WHERE
subjectCitizen.ctzPK = 2

公民表上应该有一个外键,如"AdminId",然后您选择的查询更改为:

SELECT ctz.Name, ctz.AdminId, ad.Name
FROM Citizen ctz
INNER JOIN Admin ad
ON ctz.AdminId = ad.Id
WHERE ctz.Id = 2

最新更新