我必须将一个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。
答案 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'