带条件的mysql查询查询一条记录

时间:2018-03-01 10:23:16

标签: mysql sql

有没有办法检查mysql中是否存在记录?

Select name FROM test as p 
Where (category = 'cat'
OR category = 'dog')

我想要实现的是来自测试表的查询名称,如果类别是cat。如果此查询中没有记录,则查询类别为dog的位置。

如果类别cat可用,请不要查询类别狗。

6 个答案:

答案 0 :(得分:1)

一种方法是使用两个查询:一个用于猫,一个用于没有猫存在的狗。使用UNION ALL将查询结果合二为一。

select name from test where category = 'cat'
union all
select name from test where category = 'dog'
where not exists (select * from test where category = 'cat');

答案 1 :(得分:0)

你可以通过一些左连接来实现它,它非常昂贵,但它可以工作:

Select p.name FROM test as p 
LEFT JOIN test pCat ON pCat.id = p.id and pCat.category = 'cat'
LEFT JOIN test pDog ON pDog .id = p.id and pDog .category = 'dog'
WHERE other conditions

答案 2 :(得分:0)

如果存在category =“cat”的行,则返回cat的名称。否则它会返回狗的名字。

SELECT IF(
(SELECT COUNT(id) FROM test WHERE category ="cat"), 
(SELECT `name` FROM test WHERE category ="cat"), 
(SELECT `name` FROM test WHERE category ="dog")
) FROM test

答案 3 :(得分:0)

可以使用mysql 中的IF条件和内部查询来完成

select name, cat from test 
where cat in (select IF(t.c1>0,'cat','dog') as cat from 
(select count(cat) as c1 from test where cat='cat') t)

答案 4 :(得分:0)

为了完整起见,我将展示如何在标准SQL中执行此操作。这在目前尚未在MySQL中提供,但可能在将来的版本中。

select name
from test
where category in ('cat', 'dog')
order by category
fetch first 1 row with ties;

您会看到我们按类别排序,然后选择第一行(fetch first 1 row - 猫行(如果有的话,狗行),以及相同类别的所有行(with ties)。

MySQL有一个LIMIT子句(而不是FETCH FIRST n ROWS),但这里没有绑定子句,所以在这里没有用。

答案 5 :(得分:0)

这是MySQL中的另一种方法:

select name
from test
where category in 
(
  select min(category)
  from test
  where category in ('cat', 'dog')
);