如果只有一个结果行,请选择自连接

时间:2013-12-06 13:09:24

标签: mysql sql

执行表的SELF JOIN是否可行/经济(对于此示例,我的表myTable有两列pkfk),并返回记录,如果只有一个结果记录?我想的是类似下面的内容,但only_one_row()是一个虚构的函数,需要用真实的东西代替:

SELECT fk
FROM myTable as t1
INNER JOIN myTable AS t2 ON t2.fk=t1.fk
WHERE t1.pk=1
AND only_one_row();

例如,如果myTable(id,fk)具有以下记录,则只生成一条记录,并且我选择该记录:

1 1
2 1
3 2

但是,如果myTable(id,fk)具有以下记录,则会生成两个“1”记录,并且select不应返回任何行:

1 1
2 1
3 2
4 1

我可以使用PHP这样做,但如果可行,我宁愿使用SQL。

2 个答案:

答案 0 :(得分:3)

使用计算结果的HAVING子句。

SELECT fk
FROM myTable as t1
INNER JOIN myTable AS t2 ON t2.fk=t1.fk
WHERE t1.pk=1
HAVING COUNT(*) = 1

答案 1 :(得分:2)

这个怎么样:

SELECT fk
FROM myTable as t1
INNER JOIN myTable AS t2 ON t2.fk=t1.fk
WHERE t1.pk=1
GROUP BY fk
HAVING COUNT(fk) = 1