【问题标题】:MYSQL if @@ROWCOUNT UNION SELECT ANOTHER QUERYMYSQL if @@ROWCOUNT UNION SELECT ANOTHER QUERY
【发布时间】:2016-03-17 14:59:24
【问题描述】:

以下是来自 SQL Server 的查询:

SELECT * FROM ITEM WHERE item.name = hank
If @@ROWCOUNT < 20 THEN
UNION
SELECT * FROM ITEM WHERE item.name = jim
ENDIF

这在 MySQL 中可行吗?

【问题讨论】:

  • 你打算写存储过程吗?
  • The IF statement 您正在使用(不是the IF function)仅适用于存储过程。
  • @@ROWCOUNT 是特定于 SQL Server 的,因此我已根据我的猜测正确编辑了您的问题。欢迎进一步澄清。

标签: mysql union


【解决方案1】:

如果我理解正确,您不需要union。一种选择是将order bylimit 一起使用:

select * 
from item
where name in ('hank','jim')
order by name
limit 20

这将从item 表中选择20 行,从name = 'hank' 所在的行开始。您也可以考虑使用:

order by case when name = 'hank' then 0 else 1 end 
limit 20

【讨论】:

  • 这不是我真正想要的。我的实际查询非常复杂,所以这对我不起作用。真正需要的只是一个简单的解决方案,看看行数是否超过10,然后联合选择第二个查询
  • @DrivingInsanee -- 如果你想在你的 sql 中包含 if 逻辑,你将需要创建一个存储过程。这是对已发布解决方案的稍微不同的看法,可能会有所帮助(尽管基于相同的概念):sqlfiddle.com/#!9/b6c49/4
【解决方案2】:

我不确定这种行为是否已记录/保证,但in the past 我发现以下方法有效。

SELECT SQL_CALC_FOUND_ROWS *
FROM Item
WHERE Name ='Hank'

UNION ALL

SELECT *
FROM Item
WHERE FOUND_ROWS() < 20 AND Name = 'Jim';

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2015-10-04
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多