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  |
------------------

基本的に、のにfoo1対応するIDを持つすべての行を選択し、inと同じで、に等しい行があるかどうかを含む列を返します。それ以外の場合は、です。たとえば、これはクエリが私の2つのサンプルテーブルから返す必要があるものです。id2foo2flagyfoo2id2idfoo1foo2n

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

id = 1に対して返されるフラグがy、ではなく、であることに注意してください。これは、に等しい、およびに等しいn行が少なくとも1つあるためです。id21foo2

そのようなクエリは可能ですか?

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 に答える