好吧,假设我有两个表:Table1 [Rows:id,num,name],Table2 [Rows:num,description]。我想查询Table1以得到Table1.num = Table2.num所有行的id。所以我写道:
SLECT t1.id, t1.num, t2.description
FROM Table1 t1 RIGHT OUTER JOIN
Table2 t2 ON (t1.num = t2.num)
/ Table2只有一条记录如下:Num = 123,Description =' Abc' /
所以我的结果应该是这样的: 1,123,Abc 2,123,Abc 5,123,Abc
但我得到的结果是; 3,111,Null 4,222,Null
答案 0 :(得分:2)
如果您希望a
中的所有行以及b
中的匹配行,请使用LEFT JOIN
:
SELECT count(a.object_id)
FROM table1 a LEFT OUTER JOIN
table2 b
ON a.num = b.num /*I only have one record in table b, which num field = '123'*/
LEFT JOIN
保留 first 表中的所有行,无论ON
子句的计算结果是否为true。无论RIGHT JOIN
子句的计算结果为true,ON
都会保留 second 表中的所有行。您好像想要LEFT JOIN
。
作为一般规则,我不使用RIGHT JOIN
。我发现阅读FROM
子句的逻辑“保持到目前为止看到的表中的所有行”要容易得多。
答案 1 :(得分:0)
使用RIGHT OUTER JOIN
,至少的行数与 right 表中的行数相同。
答案 2 :(得分:0)
当您进行连接时,您将获得符合条件的两个表中的记录数。如果表A只有一条记录,那么表B可能有多条满足连接条件的记录。
因此,期望只有一条记录是不合理的。如果您应该根据业务规则只有一条记录,那么您需要过滤第二个表中的记录,以便只产生一个记录。您选择返回哪一个完全取决于业务规则,而且数据意味着不是语法。
答案 3 :(得分:0)
SELECT DISTINCT解决了我的问题。感谢各位的帮助!