gpt4 book ai didi

mysql - 如果存在则从表中选择,否则从完全不同的表中选择

转载 作者:行者123 更新时间:2023-11-29 01:44:38 25 4
gpt4 key购买 nike

我有一个获取两个值的查询:

string query = @"SELECT price, weight
FROM map
WHERE width = @width AND height = @height LIMIT 1";

if (_connSource.State != ConnectionState.Open)
_connSource.Open();
MySqlCommand cmd = new MySqlCommand(query, _connSource);
cmd.Parameters.AddWithValue("width", width);
cmd.Parameters.AddWithValue("height", height);
r = cmd.ExecuteReader();

if (!r.Read())
{
r.Close();

query = @"SELECT retail_price, 0
FROM globe
WHERE PK_Id = @PK_Id LIMIT 1"

cmd = new MySqlCommand(query, _connSource);
cmd.Parameters.AddWithValue("PK_Id ", 1);
r = cmd.ExecuteReader();
}

我需要的是根据条件获取priceweight,但是如果表中不存在,那么我需要获取另外两个字段retail_price,以及一个全新表中的常量 0(不管它是什么),没有来自前一个表的约束。 我可以在一个查询中获得这两个吗?

注意:请给我优化的查询,它不会强制多次读取相同的值(这个函数在一次操作中执行了数千次,所以速度非常关键 - 这就是我试图获得的原因它在一个查询中)。谢谢..

最佳答案

语法有点难看,但我认为你可以做到:

(SELECT price, weight
FROM map
WHERE width = @width AND height = @height LIMIT 1)
UNION ALL
(SELECT retail_price as price, 0 as weight
FROM globe
WHERE PK_Id = @PK_Id LIMIT 1)

这将返回 0 到 2 行。如果返回 2 行,则选择第一行。

编辑 您可以尝试通过使用这个可怕的构造来避免第二次查询的成本。我不确定 MySQL 是否能很好地处理它,但它很有可能避免第二次查询:

select
ifnull(price, (select retail_price from globe where PK_Id = @PK_Id LIMIT 1))
, ifnull(weight, 0)
from map
WHERE width = @width AND height = @height LIMIT 1

关于mysql - 如果存在则从表中选择,否则从完全不同的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com