有没有办法检查mysql中是否存在记录?
Select name FROM test as p
Where (category = 'cat'
OR category = 'dog')
我想要实现的是来自测试表的查询名称,如果类别是cat。如果此查询中没有记录,则查询类别为dog的位置。
如果类别cat可用,请不要查询类别狗。
答案 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 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')
);