SELECT EXISTS 检查行是不是存在于另一个表中

Posted

技术标签:

【中文标题】SELECT EXISTS 检查行是不是存在于另一个表中【英文标题】:SELECT EXISTS to check if row exists in another tableSELECT EXISTS 检查行是否存在于另一个表中 【发布时间】:2021-08-26 21:16:32 【问题描述】:

我正在尝试使用SELECT EXISTS 根据电子邮件列查找任何匹配的行。起初我通过它是有效的,但后来我注意到无论我做什么它都会给我同样的结果。

代码如下:

def insert():
    time.sleep(5)
    email = "fakeemailgunicornalltestf@fakemail.com"
    company = "Conglomo"
    typeemail = "whitelist"
    try:    
        connecttosql = sqlite3.connect('database/spamdatabase.db')
        connectioncursor = connecttosql.cursor()

        connectioncursor.execute("SELECT EXISTS(SELECT 1 FROM loggedemails WHERE email = ?)", (email,))
        # print(connectioncursor.fetchone())
        if connectioncursor.fetchone():
            alreadyprocessed = "This has been already processed. This is was an error you may want to reverse this action. (Feature coming soon)"
            print(alreadyprocessed)
            return alreadyprocessed
        else:            
            sql_insertval = """INSERT INTO heldforreview (email, company, type)
                                VALUES(?,?,?)
                                CHECK ;"""
            sowreqeust = (email,company,typeemail)
            connectioncursor.execute(sql_insertval, sowreqeust)
            connecttosql.commit() 
            insert.result = "SUCCESS"

    except Exception as Argument:
        print("Email is added to database error: "+str(Argument))
        insert.result = "FAILED"
        print(insert.result)
        return insert.result
    print(insert.result)
    return insert.result
insert()

上面的代码假设检查loggedemails 列是否已经添加了fakeemailgunicornalltestf@fakemail.com。但是它说它已经被添加了,即使它还没有被故意添加。

有什么建议吗?

谢谢大家!

【问题讨论】:

那部分代码很乱,不应该在这里发布。我只是在测试一堆东西来让它工作。代码已更新。我从这个堆栈溢出帖子中得到了 SELECT EXISTS 的想法:我从这个堆栈溢出帖子中得到了这个想法:***.com/a/18817754 很抱歉造成混乱。 @khelwood 我认为您应该打印 fetchone() 并查看它返回的内容。如果它返回一个非空元组,那么if connectioncursor.fetchone(): 将成功:这并不意味着它在您的数据库中找到了电子邮件。 当我尝试print(connectioncursor.fetchone())时,它给了我(0,)的结果我应该尝试if connectioncursor.fetchone()=="(1,)": 【参考方案1】:

如果您的 SELECT EXISTS 查询找到您要查找的行,则 fetchone 将返回一个包含 1(表示 true)的元组。

如果没有找到该行,则fetchone 将返回一个包含 0(表示 false)的元组。

在任何一种情况下if connectioncursor.fetchone(): 都会成功,因为非空元组是真实的,无论它包含什么。

您可以通过将条件更改为以下方式来修复它:

if connectioncursor.fetchone()[0]:

if connectioncursor.fetchone()==(1,):

【讨论】:

if connectioncursor.fetchone()[0]: 完全成功了!谢谢你帮我解决这个问题。

以上是关于SELECT EXISTS 检查行是不是存在于另一个表中的主要内容,如果未能解决你的问题,请参考以下文章

检查Table1中的字段组合是不是存在于另一个Table2中(SQL)

使用 lodash 检查数组是不是存在于另一个数组中

Mysql - 检查行是不是存在

检查所有ID是不是都存在于另一个数据集中[重复]

检查一个列表元素中的元素是不是存在于另一个列表中

检查日期是不是已存在于另一个时间段中