mySQL子查询,看看是否

时间:2013-11-12 20:04:03

标签: mysql

  • 每张相册都有很多图标。
  • 如果某个图标的字段current <> 0
  • ,则该图标是最新的
  • 如果每个图标都是最新的,则相册是最新的。

我需要知道: 对于每张专辑,专辑是当前的吗?

我试过了:

 "SELECT *, ".$subquery." AS current FROM tbl_album"

其中$subquery是:

 SELECT EXISTS( SELECT 1 FROM tbl_icon2album JOIN tbl_album ON tbl_album.id=tbl_icon2album.albumID WHERE tbl_icon2album.b_current_in_timeproof = 0)

但这不起作用。我收到消息“ 1064您的SQL语法错误

有趣的是,子查询作为一个独立的工作正常。此外,主查询工作正常如下:

SELECT *, 1 AS current FROM tbl_album

因此,如果子查询有效,并且主查询有效,为什么它们不能一起工作?

post scriptum: this question中提供了解决此问题的有效解决方案。

2 个答案:

答案 0 :(得分:2)

这里不需要子查询,试试这个:

SELECT  a.albumId,
        IF( SUM(IF(i.current<>1,1,0)) = 0,'Current','Not Current') as IsCurrent
FROM    tbl_album a
LEFT JOIN tbl_icon2album i ON i.albumId = a.albumId
GROUP BY a.albumId

根据图标当前状态的总和更新查询以反映相册是否是最新的。

更新:将i.current&lt;&gt; 0更改为i.current&lt;&gt; 1

答案 1 :(得分:0)

所以我在这里做了一些猜测,因为你没有提供表格的结构。您正在尝试选择所有相册,并说明它们是否为“当前”,其中“当前”指定为具有一个或多个当前图标:

SELECT 
    IF(
        tbl_icon2album.current != 0,
        "current",
        "not current"
    ) AS isAlbumCurrent,
    tbl_album.*
FROM tbl_album
LEFT JOIN tbl_icon2album ON 
    tbl_album.id=tbl_icon2album.albumID
GROUP BY tbl_album.id;