【问题标题】:SQL Select Data From Row If Exists Else Create RowSQL 如果存在则从行中选择数据否则创建行
【发布时间】:2013-12-27 11:20:39
【问题描述】:

我遇到了很多关于 SQL SELECT IF EXISTS 的问题,但我无法准确地拼凑出我需要的东西。

我要做的是从一个表中的一行中选择特定数据(如果该行存在),否则使用默认值创建该行,并在对数据库的一次查询中完成所有操作。

如果该行尚不存在,我可以在数据库中创建该行,如果存在则从该行中选择数据,但如果可能的话,我想将后两者结合起来。

所以,而不是这个: 1、使用SELECT检查行是否存在 2、如果行不存在INSERT 3、如果row确实存在,再SELECT抓取数据

我想做: 1,使用select检查行是否存在,如果行存在,则在同一个查询中获取所有数据 2、如果行不存在插入行

希望我解释得当,感谢大家的帮助,非常感谢!

【问题讨论】:

  • 你可能正在使用存储过程
  • 如果已经存在,是否要更新记录?
  • 如果不存在,如果要更新,可以进行插入,并参考更新的记录,请参考:stackoverflow.com/questions/3164505/…
  • 我不想更新已经存在的记录,我想加载它,但这不是问题,问题是我不想使用两个选择调用,我想检查是否数据存在并在同一个选择函数中全部获取。不确定这是否可能。

标签: mysql sql lua


【解决方案1】:

不完全确定问题出在哪里。当然,你想要的(在伪代码中)是:

qryexecute("SELECT * FROM table WHERE ... FOR UPDATE")

if numrows(qry) > 0 then
  rowfetchdata(qry)
else
  execute("INSERT INTO table VALUES (...)")
  row ← ... // inserted data
end if

// use row

【讨论】:

  • 是的,我相信这就是我想要的,不必使用两个选择调用,能够检查行是否存在并在同一个选择调用中获取所有数据。 :)
  • @user3052750:那么,有什么问题?
  • 你的伪代码有道理,我不知道如何将查询存储在变量中以使用它两次:)
  • @user3052750:这个问题与 MySQL 几乎没有关系,而与您访问它的代码有很大关系。您使用什么语言/库/框架/工具?
  • 我正在使用 lua,它允许完整范围的 sql 语法,我只是不知道是否有一种方法可以使用 sql 创建一个变量来保存选择查询,如果是这样的话我需要什么!
【解决方案2】:
IF Not EXISTS (SELECT * FROM ------)
BEGIN
    --Insert HERE
END
ELSE
BEGIN
   --  select HERE
END

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多