如果存在关系,则选择TRUE或FALSE

时间:2014-01-09 00:00:46

标签: mysql sql

table1

    id  name

    1   john
    2   mary
    3   bill
    4   carrie

table2

    id  thing

    1   ball
    2   socks

tableJoin

    id  name_fk    thing_fk

    1     1           1
    2     4           2

我想要一个查询,从tableJoin中选择table1中的所有名称和“table2中的关系”列,如下所示:

tableResult:

columnName     columnRelationshipExists

 john            YES
 mary            NO
 bill            NO
 carrie          YES

2 个答案:

答案 0 :(得分:2)

可以使用相关子查询:

SELECT   name, EXISTS(SELECT * FROM tableJoin WHERE tableJoin.name_fk = table1.id)
FROM     table1;

或者是分组外部联接:

SELECT   table1.name, COUNT(tableJoin.name_fk) > 0
FROM     table1 LEFT JOIN tableJoin ON tableJoin.name_fk = table1.id
GROUP BY table1.name;

sqlfiddle上查看。

答案 1 :(得分:0)

另一种选择:

SELECT t1.name, tj.id IS NOT NULL
FROM table1 t1
LEFT JOIN tableJoin tj ON tj.name_fk = t1.id
GROUP BY t1.name

我没有测试过,但我的感觉是IS NOT NULL会比EXISTS(SELECT)COUNT

更快