将1列连接到2个表之一的更好方法?

时间:2011-01-07 23:02:34

标签: sql sql-server sql-server-2005

我必须将一个ID列连接到两个不同表中的一个。基于名为reqIdType的列,我知道要去哪一个,该列告诉我reqID列包含哪种类型的ID。这就是我正在做的事情:

SELECT e.*,
reqfirstName =
CASE e.reqIDtype
    WHEN 'N' THEN
        u1.firstName
    ELSE c1.firstName
END,
reqLastName =
CASE e.reqIDtype
    WHEN 'N' THEN
        u1.lastName
    ELSE c1.lastName
END
repeat with email, etc.
FROM ers e
LEFT JOIN contacts c1 ON c.contactID = e.reqID
LEFT JOIN users u1 ON u1.uid = reqID

我想知道是否有更好的方法来做到这一点?不知怎的,我可以检查reqIDType字段,然后选择我的所有字段,否则选择我所有的其他字段?我现在这样做的方式是制作很多混乱的SQL。

1 个答案:

答案 0 :(得分:2)

观察您有两个不相交的集合:与联系人关联的ER和与用户关联的ER。您可以单独选择每个集合,只需附加结果:

SELECT e.*, u.firstName, u.lastName /* etc.. */
FROM ers e JOIN users u ON u.uid = e.reqID
WHERE e.reqIDtype = 'N'
UNION ALL
SELECT e.*, c.firstName, c.lastName /* etc.. */
FROM ers e JOIN contacts c ON c.contactID = e.reqID
WHERE e.reqIDtype <> 'N'