如果选择查询返回空结果,请在 mysql 中运行另一个选择查询

Posted

技术标签:

【中文标题】如果选择查询返回空结果,请在 mysql 中运行另一个选择查询【英文标题】:If a select query return empty result, run another select query in mysql 【发布时间】:2013-02-27 04:46:01 【问题描述】:

我有 2 个选择语句。

1- select sm.id, IFNULL(sm.unit_price,0) as unit_price       
   from crm_stock_manager sm
   left join crm_purchase_order_items poi on poi.id = sm.purchase_order_item_id and  poi.is_del = 0
   left join crm_products p on poi.product_id = p.id and p.is_del = 0
   where sm.is_del = 0 and IFNULL(sm.unit_price, '') != '' and p.id = 253 order by sm.created_on;

2- select 0 as id ,price as unit_price from crm_products where id = 253  and is_del=0;

如果第一个选择语句返回一个空结果,那么我想运行第二个选择语句。

请帮帮我。

【问题讨论】:

只需执行 2 个单独的查询,一个接一个 有没有办法在 mysql 上做到这一点? 有什么理由在 mysql 中这样做吗? 这是否意味着如果 srm_stock_manager.unit_price 为 NULL,您需要选择 crm_products.price? 没有。如果 crm_stock_manager 表包含我需要从该表中获取记录的任何数据。否则它将从 crm_products 表中获取。 【参考方案1】:

这似乎在我刚刚进行的快速测试中有效,并且避免了两次检查 x=1 是否存在的需要。

SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1

UNION ALL

SELECT *
FROM mytable
WHERE 
FOUND_ROWS() = 0 AND x = 2;

另一种方法是使用 EXISTS 或 NOT EXISTS 的子查询

SELECT column1 FROM t1 WHERE NOT EXISTS (SELECT * FROM t2);

【讨论】:

在同一个 UNION 查询中跨 SELECT 的 FOUND_ROWS() 行为是否发生了变化?我看到这种方法适用于 MySQL 5.1.61,但不适用于 5.6.15。在后一种情况下,第二个 SELECT 中的 FOUND_ROWS() 似乎返回前一个查询而不是前一个 SELECT。我错过了什么吗? 联合行和找到的行之间存在很大的困难,但这取决于需要和表​​架构 不存在是一个不错的解决方案【参考方案2】:

你可以这样做

$query1 = mysql_query("YOUR QUERY");
$row_count = mysql_num_rows($query1);
if($row_count==0) 
 $query1 = mysql_query("Your Second Query");

切记不要使用mysql_* 函数,因为它们已被贬值。

希望对你有帮助

【讨论】:

【参考方案3】:

如果你需要选择crm_products.price,如果srm_stock_manager.unit_price为NULL,你可以使用COALESCE,你不需要2个查询。您可以按如下方式更改SELECT 语句的第一部分,并根据需要更改其他部分以获得所需的结果。

SELECT sm.id, COALESCE(sm.unit_price, p.price) unit_price FROM...

如果 sm.unit_price 为 NULL,则返回 p.price 值。

进一步,参考mysqldoc。

【讨论】:

IFNULLCOALESCE。参考this。

以上是关于如果选择查询返回空结果,请在 mysql 中运行另一个选择查询的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL如果一个选择查询返回0行然后另一个选择查询?

踩坑记录Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

踩坑记录Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

踩坑记录Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

MYSQL JSON 选择查询每次运行都会返回不同的结果

MySQL 数据库查询返回空结果