sql - SQLITE中意外的LEFT OUTER JOIN行为

标签 sql join sqlite

我在SQLITE中有两个表

“端口”是

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保持不变。

最佳答案

对结果进行逆向工程使我得出结论,即您的数据与您所说的不同。您似乎有:

港口:

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


Bench2:

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


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

关于sql - SQLITE中意外的LEFT OUTER JOIN行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063471/

相关文章:

sql - 卸载语句

sql - 理解 postgreSQL 中的 HashJoin

sql - Postgres : How to join multiple tables?

mysql join日期记录失败,可见where子句

javascript - Web SQL 数据库 - 执行异步调用并继续

sqlite - iOS 5 中 SQLite 的距离函数非常慢

sql - 通过选择在 Hive 中插入值

php - MySQL查询条件中的大写和小写

sql - 在 Redshift 中拆分行

sqlite - 共同时代(BCE)日期之前保存