表之间有条件的JOIN?

时间:2012-02-23 13:55:57

标签: sql join conditional

我有两个表,我应该编写一个连接这两个表的select查询,但我不知道这两个表之间的条件连接是什么?

有些人可以说是什么吗?

TABLE ParameterRegistration
(
    RegistrationTime DATETIME,
    PatiNo VARCHAR(12),
    Source VARCHAR(64),
    Code VARCHAR(64),
    NameOfCodingSystem VARCHAR(64) NULL,
    Name VARCHAR(64),
    ValueType CHAR(2) NULL,
    NumericValue INT NULL,
    StringValue VARCHAR(64) NULL,
    TextValue TEXT NULL,
    Unit VARCHAR(64) NULL,
    UnitCode VARCHAR(64) NULL,
    UnitCodingSystem VARCHAR(64) NULL,
    Remark VARCHAR(255) NULL,
    CreateDate DATETIME,
    CreateUserId T_USER_ID
)

TABLE External
(
    ModDate DATETIME,
    ModUserId VARCHAR(12),
    UbMem VARCHAR(64),
    Code VARCHAR(64),
    Name VARCHAR(64),
    Service VARCHAR(64),
    NameOfCodingSystem VARCHAR(64) NULL,

)

2 个答案:

答案 0 :(得分:3)

如果他们有某种关系,你只能正确地加入这两个表。

检查THIS ARTICLE以获取一些信息。


假设在您的情况下,表与Code,NameOfCodingSystem和Name列相关,您可以像这样进行连接:

select p.*, e.* from ParameterRegistration p
inner join External e on p.Code = e.Code and
                         p.NameOfCodingSystem = e.NameOfCodingSystem and
                         p.Name = e.Name

答案 1 :(得分:2)

连接表时,您必须加入相关的字段。由于您没有提供大量信息,因此您看起来有3个可能可以加入的字段。

  • NameOfCodingSystem VARCHAR(64)
  • 名称VARCHAR(64)
  • Code VARCHAR(64)

因此,您可以在技术上以下列方式之一编写查询:

SELECT *
FROM ParameterRegistration P
INNER JOIN External E -- or LEFT JOIN, etc
ON P.NameOfCodingSystem = E.NameOfCodingSystem 

OR

SELECT *
FROM ParameterRegistration P
INNER JOIN External E -- or LEFT JOIN, etc
ON P.Name = E.Name 

OR

SELECT *
FROM ParameterRegistration P
INNER JOIN External E -- or LEFT JOIN, etc
ON P.Code = E.Code 

或者您可以同时加入所有字段

SELECT *
FROM ParameterRegistration P
INNER JOIN External E -- or LEFT JOIN, etc
ON P.NameOfCodingSystem = E.NameOfCodingSystem  AND
P.Name = E.Name AND
P.Code = E.Code 

我的建议是研究JOINs。以下是一些资源,但互联网上有很多资源: