从右侧未知表中选择数据,如何?

时间:2012-01-02 21:40:20

标签: mysql

我有三个表,一个用户表和两个用户类表。用户类型表具有字段UserId,因此可以链接它们。现在的问题是我有一个来自用户表的条目。从正确的表中获取数据的最佳方法是什么?

使用2个右连接是否正确,或者这可以更优雅地完成吗?

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