SQLITE中意外的LEFT OUTER JOIN行为

时间:2014-11-21 14:20:31

标签: sql join sqlite

我在SQLITE中有两个表

“port”是

ticker  weight
abc     1
bcd     2
cde     3

“bench2”是

ticker  weight
abc     3
bcd     2
cde     1

我试图学习如何在SQLITE中使用外连接。从LEFT OUTER JOIN开始,如下所示

SELECT * FROM port LEFT OUTER JOIN bench2 ON port.ticker = bench2.ticker;

我得到了结果

ticker  weight  ticker  weight
abc      3      NULL    NULL
bcd      2      bcd     2

当我希望看到

ticker  weight weight
abc       1       3
bcd       2       2
cde       3       1

我做错了什么,如何得到我想要的结果?

如果可能的话,第二个问题 - 如何获得额外的一行

ticker  weight weight
abc       1       3
bcd       2       2
cde       3       1
def       NULL    3
如果“bench2”有一个额外的行,

在结果表中

ticker  weight
abc     3
bcd     2
cde     1
def     3

虽然port保持不变。

2 个答案:

答案 0 :(得分:2)

对结果进行逆向工程会让我得出结论,您的数据与您说的不同。你似乎有这个:

端口:

ticker  weight
abc     3
bcd     2
... (no other rows)

bench2:

ticker  weight
bcd     2
... maybe other rows, but none having ticker = 'abc'

对于列,当您执行除NATURAL JOIN以外的任何连接时,每个连接表中的每列都有一个结果列,包括存在具有相同名称的列,并包括列时出现在连接条件中。您可以限制哪些列出现在最终查询结果中,和/或您可以通过在选择列表中指定所需的列来为其分配首选别名。

答案 1 :(得分:-1)

这样的事情怎么样?

SELECT table2.ticker,
       table1.weight,
       table2.weight
FROM   table2
       LEFT OUTER JOIN table1
                    ON table1.ticker = table2.ticker