0

这是我的表:

foo1
------
| id |
------
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |
------

和:

foo2
------------------
| id | id2 | foo |
------------------
| 1  |  1  |  2  |
| 2  |  1  |  1  |
| 3  |  3  |  2  |
| 4  |  3  |  1  |
| 5  |  5  |  1  |
------------------

基本上,我想选择foo1id 对应于id2of 的所有行foo2,并返回一flag列,其中包含y是否存在foo2与 in 相同id2idfoo1,并且foo等于2n否则。例如,这是查询应该从我的两个示例表中返回的内容:

-------------
| id | flag |
-------------
| 1  |   y  |
| 3  |   y  |
| 5  |   n  |
-------------

请注意,为 id = 1 返回的标志是y,不是n,因为至少有一行id2等于1foo等于2

这样的查询可能吗?

4

2 回答 2

2
SELECT  DISTINCT a.ID, 
        IF(c.id2 IS NULL, 'n', 'y') flag
FROM    foo1 a
        INNER JOIN foo2 b
            ON a.ID = b.id2 
        LEFT JOIN foo2 c
            ON b.id2 = c.id2 AND
                c.foo = 2
于 2013-02-23T07:55:16.413 回答
2
select foo1.id id, if(max(foo2.foo = 2), 'y', 'n') flag
from foo1 join foo2 on foo1.id = foo2.id2
group by id
于 2013-02-23T07:59:05.950 回答