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

问题描述 投票:2回答:6

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

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

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

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

mysql sql
6个回答
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');

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

0
投票

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

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

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)

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),但它没有绑定子句,所以这里没用。


0
投票

这是MySQL中的另一种方法:

select name
from test
where category in 
(
  select min(category)
  from test
  where category in ('cat', 'dog')
);
© www.soinside.com 2019 - 2024. All rights reserved.