根据另一个表中的匹配值从一个表中选择数据
问题描述:
我试图根据另一个表中的数据从一个表中选择数据。我的代码如下:Update SQLite table based on data in another table根据另一个表中的匹配值从一个表中选择数据
但我无法让它产生我期待的结果。我的发言如下:
c.execute("SELECT item1, item2, item3 FROM TableA WHERE xyz IS NULL AND item1 = (SELECT item1 FROM TableB) AND item2 = (SELECT item2 FROM TableB) AND item3 = (SELECT item3 FROM TableB)"
我试图选择表A,所有匹配的结果,其中项目1,项目2,&项目3 TableB中的比赛与在表A +,其中表A的XYZ值为NULL。
*TableA*
item1 | item2 | item3 | xyz
banana | apple | pear | NULL
carrot | potato | sausage | 1
cat | dog | bird | NULL
fish | squid | tortoise | 4
*TableB*
item1 | item2 | item3
banana | apple | pear
cat | dog | bird
fish | squid | tortoise
foo | bar | deadbeef
所以,我想选择:
banana, apple, pear
cat, dog, bird
但是我的语句只返回从tableB的第一场比赛:
即banana, apple, pear
;并且不继续搜索来自表B的其余项目。
为什么会发生这种情况并且能够解决问题?
答
我现在没有SQLite在手,所以请原谅错别字......但是inner join不是一个很好的解决方案吗?
c.execute("""SELECT item1, item2, item3
FROM TableA JOIN TableB USING (item1,item2,item3)
WHERE xyz IS NULL")
此连接将匹配相同“三联” 行(item1,item2,item3)
。
如果你只有在共同的三列item1..3
你的两个表,你甚至可能要到一个自然连接:
c.execute("""SELECT item1, item2, item3
FROM TableA NATURAL JOIN TableB
WHERE xyz IS NULL")
这是一个内部联接隐式地对列在两个表中都有相同的名称。 虽然我不是一个很大的粉丝,因为它可能会成为一个定时炸弹,准备爆炸的一天,有人无意中添加一些列到您的表...
辉煌,谢谢你(也为链接和建议)。两个例子都有效,但我想我会听从你的建议并坚持第一! – Soap 2014-09-01 16:15:14