MySql如果存在设置值?

时间:2012-04-15 15:45:45

标签: mysql

我有一个查询返回一堆信息并使用连接来连接两个表,它完全正常。

但我有一个名为门票的字段,我需要查看是否有时间可用,如果有一个设置为1,否则将其设置为0.所以就像这样。

SELECT 
name,poster,sid,tickets = (IF SELECT id FROM times WHERE shows.tid=times.tid LIMIT 1, 
if value returned set to 1, otherwise set to 0) 
FROM shows JOIN show_info ON (id) WHERE sid=54 order by name ASC

显然这不是一个正确的MySQL语句,但它会给出一个我正在寻找的例子。

这可能吗?或者我是否需要先执行第一次选择然后循环查看结果并按此方式执行第二次选择和设置值?或者是一个更好的表现?

4 个答案:

答案 0 :(得分:6)

我会看EXISTS它在大多数情况下比COUNT所有与where语句匹配的项目快得多。照这样说。您的查询应该如下所示:

SELECT 
  name,
  poster,
  sid,
  (
   CASE WHEN EXISTS(SELECT NULL FROM times WHERE shows.tid=times.tid)
      THEN 1 
      ELSE 0
   END 
  )AS tickets 
FROM 
  shows 
  JOIN show_info ON (id) WHERE sid=54 order by name ASC

答案 1 :(得分:1)

查看CASE声明

SELECT name,poster,sid,
Case WHEN (SELECT count(id) FROM times WHERE shows.tid=times.tid) > 0 THEN 1 else 0 END as Tickets
FROM shows 
JOIN show_info ON (id) 
WHERE sid=54 order by name ASC

答案 2 :(得分:0)

SELECT 
name,
poster,
sid,
CASE WHEN (SELECT COUNT(*) FROM times WHERE shows.tid=times.tid ) > 0 THEN 1 ELSE 0 END CASE tickets
FROM shows 
JOIN show_info ON (id) 
WHERE sid=54 
order by name ASC

有关CASE的参考,请参阅MySQL Docs

答案 3 :(得分:0)

这是我能想到的最简单的方法:

SELECT name, poster, sid,EXISTS(SELECT * times WHERE shows.tid=times.tid) tickets
FROM shows
JOIN show_info USING (id)
WHERE sid = 54
ORDER BY name