Python:如何组合两个SQL查询

Python:如何组合两个SQL查询,python,sql,Python,Sql,由于我对Python的了解有限,我如何用Python编写一个查询,该查询将包含以下两个内容,其中第二个将被查询,第一个何时返回而不是结果(没有返回电子邮件地址) 破译 bits = sys.argv[1].split('@') if len(bits) != 2: sys.exit(0) cur.execute("SELECT email FROM notifications WHERE diraddr = %s", (sys.argv[1],)) cur.execute("S

由于我对Python的了解有限,我如何用Python编写一个查询,该查询将包含以下两个内容,其中第二个将被查询,第一个何时返回而不是结果(没有返回电子邮件地址)

破译

bits = sys.argv[1].split('@')
if len(bits) != 2:
    sys.exit(0)

cur.execute("SELECT email FROM notifications WHERE diraddr = %s", (sys.argv[1],))    
cur.execute("SELECT email FROM users WHERE (username LIKE %s) AND (domain LIKE %s) and notifications = 'Y'", (bits[0], bits[1]))
我曾尝试使用IF…ELSE for
email
返回第一个SQL查询的结果,但它似乎可以在一个查询中完成,而无需IF…ELSE语句。

这取决于“合并”是什么意思?您是指按行连接吗?如果是这样的话,您正在寻找
UNION ALL

cur.execute("SELECT email FROM notifications WHERE diraddr = {0} UNION ALL SELECT email FROM users WHERE (username LIKE {1}) AND (domain LIKE {2}) and notifications = 'Y'".format(sys.argv[1], bits[0], bits[1]))
UNION ALL
运算符组合来自多个查询的结果,只要它们具有相同的列数。即使其中一个子查询(或两个子查询)不返回任何结果,这也会起作用

注意:我使用更新了您的代码

这取决于——你说的“合并”是什么意思?你是说按行连接吗?如果是这样的话,您正在寻找
UNION ALL

cur.execute("SELECT email FROM notifications WHERE diraddr = {0} UNION ALL SELECT email FROM users WHERE (username LIKE {1}) AND (domain LIKE {2}) and notifications = 'Y'".format(sys.argv[1], bits[0], bits[1]))
UNION ALL
运算符组合来自多个查询的结果,只要它们具有相同的列数。即使其中一个子查询(或两个子查询)不返回任何结果,这也会起作用

注意:我使用更新了您的代码


当你说“合并”时,你能更具体地回答这个问题吗

从代码中我了解到,您将获得一个电子邮件id作为输入(作为参数)

您将拆分该电子邮件id,并将用户名和域名存储为2个列表元素。如果第一个查询没有返回任何结果(查询通知表),那么您想使用列表中的元素执行另一个查询(在用户表上)


如果上述情况为真,则使用简单的If-else逻辑检查第一个查询是否返回任何结果。如果它没有返回任何结果,则执行else部分中的第二个查询。

当您说COMBINE时,您能否更具体地回答问题

从代码中我了解到,您将获得一个电子邮件id作为输入(作为参数)

您将拆分该电子邮件id,并将用户名和域名存储为2个列表元素。如果第一个查询没有返回任何结果(查询通知表),那么您想使用列表中的元素执行另一个查询(在用户表上)


如果上述情况为真,则使用简单的If-else逻辑检查第一个查询是否返回任何结果。如果没有返回任何结果,则执行else部分中的第二个查询。

实际上,您应该使用游标参数。文字值没有格式或模数。太好了。这就是我想要的事实上,你应该使用游标参数。文字值没有格式或模数。太好了。这正是我所做的,但我希望一次完成(查询)。由于功能是基于事件(if-else)执行的,因此必须编写if-else逻辑才能完成。或者使用上述回答中提到的联合声明。注意:上面的查询包含UNION ALL。如果两个表中都存在该值,则可能会检索多条记录。所以,每次使用UNION而不是UNIONALL来检索唯一的记录。好主意。谢谢你的帮助!这正是我所做的,但我希望一次就完成(查询)。因为功能是基于事件(if-else)执行的,所以必须编写if-else逻辑才能完成。或者使用上述回答中提到的联合声明。注意:上面的查询包含UNION ALL。如果两个表中都存在该值,则可能会检索多条记录。所以,每次使用UNION而不是UNIONALL来检索唯一的记录。好主意。谢谢你的帮助!