我有三个表,一个用户表和两个用户类表。用户类型表具有字段UserId,因此可以链接它们。现在的问题是我有一个来自用户表的条目。从正确的表中获取数据的最佳方法是什么?
使用2个右连接是否正确,或者这可以更优雅地完成吗?
答案 0 :(得分:2)
是的,但我会使用LEFT OUTER JOIN。也就是说,如果存在这样的行,则需要来自UserTable的行,然后可能需要来自相应UserType表的行。
以下是一个例子:
SELECT ...
FROM UserTable u
LEFT OUTER JOIN UserType1 t1 ON u.userid = t1.userid
LEFT OUTER JOIN UserType2 t2 ON u.userid = t2.userid
据推测,最多一个用户类型表有一个条目。因此,t1。*或t2。*将是所有NULL的单行,并且由于笛卡尔积,您将不会获得多行。
答案 1 :(得分:0)
除了LEFT JOIN
之外,还有UNION
需要更多的工作来显示2个表可能具有的不同列:
SELECT u.*
, t1.colA, t1.colB, ..., t1.colZ --- columns in both tables 1 and 2
, t1.col_1a, t1.col_1b, t1.col_1c --- columns in table 1 only
, NULL AS col_2a --- columns in table 2 only
, NULL AS col_2b
FROM UserTable u
LEFT OUTER JOIN UserType1 t1 ON u.userid = t1.userid
UNION ALL
SELECT u.*
, t2.colA, t2.colB, t2.colC --- columns in both tables 1 and 2
, NULL AS col_1a --- columns in table 1 only
, NULL AS col_1b
, NULL AS col_1c
, t2.col_1a, t2.col_1b --- columns in table 2 only
FROM UserTable u
LEFT OUTER JOIN UserType2 t2 ON u.userid = t2.userid