使用python比较Sqlite 3中的多个表

2024-04-28 11:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我对SQLITE3和python都很陌生。我完全是SQLite的初学者。我不太明白。我现在正在为我的项目学习,我正在做一个项目,我有一个数据库,里面有大约20个表。一个表供用户输入,另一个表预先加载了值。如何将预加载表中的值与用户表中的值进行比较和匹配??例如:

Users Table: 
Barcode:      Item: 
1234          milk
4321          cheese
5678          butter
8765          water
9876          sugar

Pre-Loaded Table: 
Barcode:       Availability:
1234               1
5678               1
9876               1
1111               1

现在,我希望能够比较预加载表中的每一行与Users表中的每一行。它们都有共同的条形码列,以便进行比较。因此,在查询过程中,应该检查每一行:

^{pr2}$

因此,当条形码(在本例中为1100)不存在于Users表中时,应该打印该代码:您没有预加载表的所有项。我怎样才能得到密码?在

到目前为止,我有这样的情况:顺便说一句,这段代码确实有效。在

^{3}$

它打印:

You can make: Ham Swiss Omelet
Barcode    Ingredients Availability 
9130849874 butter            1 
2870896881 eggs              1 
5501066727 water             1 
1765023029 salt              1 
9118188735 pepper            1 
4087256674 ham               1 
3009527296 cheese            1 

SQLite代码:

sql = ("SELECT Users_Food.Barcode, Users_Food.Item, Recipe1.Ham_Swiss_Omelet FROM Users_Food INNER JOIN Recipe1 ON Users_Food.Barcode = Recipe1.Barcode WHERE Recipe1.Ham_Swiss_Omelet = '1'")

它将这两张表与条形码结合在一起,以及相应的食品名称和供应情况。但是,如果其中一个条形码值不在预加载的表中,当我比较时,我如何进行编码以确定它不存在,同时仍然显示这两个表之间的共同点?这就像检查表是否相同。在


Tags: 项目代码用户sqlitefoodtableitemusers
1条回答
网友
1楼 · 发布于 2024-04-28 11:34:57

也许你可以试试左连接和一个CASE语句。在

来自sqlite doc

If the join-operator is a "LEFT JOIN" or "LEFT OUTER JOIN", then after the ON or USING filtering clauses have been applied, an extra row is added to the output for each row in the original left-hand input dataset that corresponds to no rows at all in the composite dataset (if any).

您需要Recipe1表作为左边的表,因为您需要选择该表中的每一行。所有来自Users_Food的列将在额外的行中为空。示例查询添加了另一列“status”,可以在python中使用。稍作调整:

SELECT Users_Food.Barcode, Users_Food.Item, Recipe1.Ham_Swiss_Omelet,
CASE WHEN (Users_Food.Barcode is null then 'You cannot make this recipe' else ' ' END as status
FROM Recipe1
LEFT JOIN Users_Food ON Users_Food.Barcode = Recipe1.Barcode
WHERE Recipe1.Ham_Swiss_Omelet = '1'

在python中,您可能不想print("You can make: Ham Swiss Omelet"),因为在获取所有返回的行之前,您不知道这是否正确。在

在获得SQL返回所需的行之后,可以使用python来获得所需的输出。在

相关问题 更多 >