Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据另一个表中的匹配值从一个表中选择数据_Python_Sqlite - Fatal编程技术网

Python 根据另一个表中的匹配值从一个表中选择数据

Python 根据另一个表中的匹配值从一个表中选择数据,python,sqlite,Python,Sqlite,我试图根据另一个表中的数据从一个表中选择数据。我的代码如下所示: 但我无法让它产生我所希望的结果。我的发言如下: 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)" 我试图从Ta

我试图根据另一个表中的数据从一个表中选择数据。我的代码如下所示:

但我无法让它产生我所希望的结果。我的发言如下:

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)"
我试图从TableA中选择所有匹配结果,其中tableB中的item1、item2和Item3与TableA+中的匹配结果相匹配,TableA的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
但我的声明只是返回表B中的第一个匹配项:

i、 e.
香蕉、苹果、梨
;并且不会继续搜索表B中的其余项


为什么会发生这种情况?它能被解决吗?

我现在手头没有SQLite,所以请原谅打字错误。。。但这不是一个很好的解决方案吗

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")