2013-12-06 2 views
0

Возможно ли/экономично выполнить САМОЕ СОЕДИНЕНИЕ таблицы (для этого примера моя таблица с именем myTable имеет два столбца pk и) и возвращает запись, если есть только одна результирующая запись? Я имею в виду что-то вроде следующего, однако, only_one_row() это вымышленный функция, необходимо будет заменить чем-то реальным:select self join, если только одна результирующая строка

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 (идентификатор, Д) имели следующие записи, только один запись производится, и я для выбора записи:

1 1 
2 1 
3 2 

Однако, если MYTABLE (идентификатор, Д) имели следующие записи, два «1» записи производятся, и выберите не возвращает ни одной строки:

1 1 
2 1 
3 2 
4 1 

Я мог бы использовать PHP, чтобы сделать это, но скорее просто использовать SQL, если это возможно.

ответ

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

Предполагая, что у меня есть соответствующие индексы в месте, есть какой-либо причине это было бы неэффективным запрос, в котором я хотел бы использовать приложение, чтобы сделать два запроса, а затем сделать заявление IF? – user1032531

+0

Он должен рассчитать все результаты и затем отфильтровать его, поэтому эффективность будет такой же, если вы выполняете IF в приложении. – Barmar

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

Любая причина 'COUNT (fk)' лучше/хуже, чем 'COUNT (*)'? – user1032531

+0

Не должно быть разницы, поскольку в предложении SELECT имеется только один столбец. Однако вам может понравиться прочитать следующее: http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/ –

Смежные вопросы