标签: exists

选择与 GORM 一起存在

我想检查数据库表中是否存在一行。我首先使用了这种方法:

type MyStruct struct {
    ID    uint32
    Key   string
    Value string
}

var result MyStruct

err := db.
    Where("id = ? AND `key` = ? AND `value` = 0", myID, myKey).
    First(&result).
    Error

if err != nil {
    if err == gorm.ErrRecordNotFound {
        logrus.Error("ErrRecordNotFound")
    }
    logrus.Errorf("Other DB error: %s", err.Error())
}
Run Code Online (Sandbox Code Playgroud)

但我想通过编写原始 SQL 来实现这一点。我尝试了以下操作:

var result bool

db.Raw("SELECT EXISTS(SELECT 1 FROM my_table WHERE id = ? AND `key` = ? AND `value` = ?)",
    myID, myKey, "0").Scan(&result)
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

unsupported destination, …
Run Code Online (Sandbox Code Playgroud)

exists go go-gorm

8
推荐指数
2
解决办法
3万
查看次数

SQL Server Set变量,如果存在,则插入表中

我正在寻找一种更有效的方法来完成这项任务.我需要设置一个等于ID的变量(如果存在),如果不存在,则将变量设置为插入的标识.我可以通过执行以下操作来实现此目的:

@VariableName --sent through to stored procedure

DECLARE @VariableID [int]

IF EXISTS(SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName)
    SET @VariableID = (SELECT VariableID FROM VariableTable WHERE VariableName = @VariableName)
ELSE 
    INSERT INTO VariableTable(VariableName) VALUES(@VariableName)
    SET @VariableID = SCOPE_IDENTITY();
END
Run Code Online (Sandbox Code Playgroud)

但是,运行相同的查询两次似乎效率低下(检查是否存在以及是否设置了变量)

只是寻找更好的方法来完成这项任务的建议.

stored-procedures exists sql-server-2008

7
推荐指数
1
解决办法
4万
查看次数

VBScript字典存在方法始终返回True

我究竟做错了什么?从我的测试中,objDic.exists永远不会给出错误!

    dim objDic

    set objDic = createobject("scripting.dictionary")

    objDic.add "test","I have not been deleted"

    wscript.echo objDic.item("test") 'Displays -- I have not been deleted

    objDic.remove "test"

    wscript.echo """" & objDic.item("test") & """" 'Displays -- ""

    if objDic.exists("test") then wscript.echo """" & objDic.item("test") & """" 'Displays -- ""
Run Code Online (Sandbox Code Playgroud)

vbscript dictionary exists

7
推荐指数
1
解决办法
3万
查看次数

如果存在或存在?

是否可以EXISTS在单个IFSQL语句中测试两个条件?我尝试了以下内容.

IF EXIST (SELECT * FROM tblOne WHERE field1 = @parm1 AND field2 = @parm2) 
   OR 
   EXIST (SELECT * FROM tblTwo WHERE field1 = @parm5 AND field2 = @parm3) 
Run Code Online (Sandbox Code Playgroud)

我试过IF在那里添加额外的括号,但无济于事.

你能用正确的语法帮助我吗?

sql sql-server conditional exists

7
推荐指数
2
解决办法
1万
查看次数

检查表是否存在C#中的if语句?

我尝试建立一个if语句来检查是否已经创建了一个表.我只想创建一个表,但现在我每次单击按钮存储信息时都会创建一个表.有什么建议?

    DataTable dt;

    private void InitDataTable()
    {

        if () { 

        }

        dt = new DataTable();
        DataSet ds = new DataSet();
        ds.ReadXml("gjesteInfo.xml");
        ds.Tables.Add(dt);

        DataColumn dc1 = new DataColumn("Fullt navn");
        DataColumn dc2 = new DataColumn("Start dato");
        DataColumn dc3 = new DataColumn("Antall dager");

        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        dt.Columns.Add(dc3);

        dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text);

        ds.Merge(dt);

        ds.WriteXml("gjesteInfo.xml");

    }



    private void lagre_Click(object sender, EventArgs e)
    {

        InitDataTable();

        gjesterutenrom.Items.Add(gjestenavnInput.Text);

        gjestenavnInput.Text = "";
        datoInnsjekk.Text = "";
        antallDager.Text = "";

        DataSet onClick = new DataSet();
        onClick.ReadXml("gjesteInfo.xml");
        lagredeGjester.DataSource = onClick.Tables[0];

    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用名为lagredeGjester的DataGridView来查看存储在XLM中的信息.

更新的问题:

现在我写了这样的代码: …

c# datatable datagridview exists readxml

7
推荐指数
1
解决办法
3万
查看次数

Python检查SQLite3中是否存在

我正在尝试检查SQLite3数据库中是否存在变量.不幸的是,我似乎无法让它工作.机场表包含3个列,其中ICAO作为第一列.

if c.execute("SELECT EXISTS(SELECT 1 FROM airports WHERE ICAO='EHAM')") is True:
    print("Found!")
else:
    print("Not found...")
Run Code Online (Sandbox Code Playgroud)

代码运行时没有任何错误,但结果始终相同(未找到).

这段代码有什么问题?

sqlite exists python-3.x

7
推荐指数
1
解决办法
9185
查看次数

如何从不同的sql db检查表的存在?

我有分贝和db B.在一个存储过程,我想从备份的所有行的开头B.mytableB.mytablebackup.存储过程的其余部分针对db A上的表运行(它收集数据并将其写入B.mytable).

所以我检查一下是否B.mytablebackup存在

IF EXISTS(SELECT 1 FROM B.dbo.mytablebackup)
Run Code Online (Sandbox Code Playgroud)

如果是,则存储过程执行

INSERT INTO B..mytablebackup SELECT * FROM B..mytable
Run Code Online (Sandbox Code Playgroud)

如果它不存在它会做

SELECT * INTO B..mytablebackup from B..mytable
Run Code Online (Sandbox Code Playgroud)

但是当我执行存储过程时,我得到了错误

数据库中已经有一个名为"mytablebackup"的对象

我添加了一个Print语句,执行正在采用IF的"不存在"分支.

我究竟做错了什么?

t-sql sql-server exists sql-server-2008-r2

7
推荐指数
2
解决办法
1万
查看次数

SQL EXISTS为什么选择rownum导致低效的执行计划?

问题

我试图理解为什么在这两个Oracle语法更新查询中看起来微不足道的原因导致执行计划完全不同.

查询1:

UPDATE sales s
   SET status = 'DONE', trandate = sysdate
 WHERE EXISTS (Select *    
 FROM tempTable tmp
     WHERE s.key1 = tmp.key1
       AND s.key2 = tmp.key2
       AND s.key3 = tmp.key3)
Run Code Online (Sandbox Code Playgroud)

查询2:

UPDATE sales s
   SET status = 'DONE', trandate = sysdate
 WHERE EXISTS (Select rownum    
 FROM tempTable tmp
     WHERE s.key1 = tmp.key1
       AND s.key2 = tmp.key2
       AND s.key3 = tmp.key3)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,两者之间的唯一区别是查询2中的子查询返回rownum而不是每行的值.

这两者的执行计划不可能更加不同:

  • Query1 - 从两个表中提取总结果,并使用sort和hashjoin返回结果.这有利于2,346的成本(尽管使用了EXISTS条款和有凝聚力的子查询).

  • Query2 - 同时拉取两个表结果,但使用计数和过滤器来完成相同的任务,并以惊人的77,789,696成本返回执行计划!我应该注意到他的查询只是挂在我身上所以我实际上并不是肯定的,这会返回相同的结果(尽管我相信它应该).

根据我对Exists子句的理解,它只是一个简单的布尔检查,它运行在主表的每一行.如果在我的EXISTS条件中返回单行或100,000行也没关系...如果为正在运行的行返回任何结果,那么您已经通过了存在检查.那么为什么我的子查询SELECT语句返回的重要性呢?

- - - - - - - - - …

sql oracle exists query-performance rownum

7
推荐指数
1
解决办法
1407
查看次数

如果表中存在数字则返回1,否则返回0

如果表中已存在某个数字,则我想返回1,否则返回0.

我尝试了一些但它不起作用:

select
case when 100 in (select distinct id from test) then '1'
else '0'
from test
Run Code Online (Sandbox Code Playgroud)

我想要的东西,类似存在已经存在于PostgreSQL的功能,但不是truefalse我想要10.

sql postgresql boolean exists

7
推荐指数
2
解决办法
1万
查看次数

F#If Statement List.exists

这是一个学校作业,但我即将发布的所有内容都是由我和我完成的.因此,我只需要你的帮助,在我的任务中迈出一小步,我就被卡住了.

let rec removeDuplicates2 xs =
  match xs with
  |[]->[]
  |y::ys -> if y = (List.exists y ys) then
              (removeDuplicates2 ys)
            else
              y::(removeDuplicates2 ys)

printfn "%A" (removeDuplicates2 [3;1;3;2;1]) // result must be [3;1;2] 
Run Code Online (Sandbox Code Playgroud)

我需要帮助的是制作if语句来检查元素y是否是列表ys的成员

目前我得到错误说:"这个表达式预计会有'a - > bool'类型,但这里有'bool'类型"

谁能告诉我我做错了什么?

f# if-statement list exists elements

7
推荐指数
1
解决办法
550
查看次数