2013-04-04 1 views
0

У меня есть интересный запрос, который отлично работает со статическими данными, но мне нужны мои данные для динамического. Таким образом, статические данные как этотНаписание коррелированного подзапроса в моем запросе select

SELECT c.my_name, c.my_id, (SELECT count(d.friendship_id) FROM another_table d WHERE d.my_id = 1 AND d.my_friends_id = 2) as count FROM myprofile c WHERE c.my_id = 1; 

Это возвращает данные, которые я хочу, как это:

 
my_name my_id count 
parijat 123  1 (OR 0 if the row doesn't exist) 

Для справки, как another_table.my_id (внешний ключ), another_table.my_friends_id ссылки myprofile.my_id (основной ключ). Здесь используется первичный ключ another_table.friendship_id и автоматически увеличивается.

Теперь собственно вопрос:

Я хочу, чтобы мой подзапрос быть что-то вроде этого: (SELECT COUNT (d.friendship_id) FROM another_table г WHERE d.my_id = 1 И d.my_friends_id = CURRENT_ROW_ID)

где CURRENT_ROW_MY_ID - это c.my_id, который выбирается в основном запросе.

Возможно ли это, а если нет, то каким должен быть мой подход для получения результатов, которые мне нужны?

ответ

0

Вы можете сделать подзапрос, чтобы получить текущее значение AUTO_INCREMENT для этой таблицы:

select auto_increment from information_schema.tables where table_schema = 'you_db_name' and table_name = 'your_table_name' 

HTH

Francisco

+0

и почему я хочу получить текущее значение auto_increment? –

0

Иногда я спрашиваю, прежде чем я полностью исследовал вариант. Просто выяснилось, что коррелированный подзапрос отлично работает даже в отдельных операторах. Вот что я сделал, чтобы заставить его работать:

SELECT c.my_name, c.my_id, (SELECT count (d.friendship_id) FROM another_table d WHERE d.my_id = 1 AND d.my_friends_id = c.my_id) as count FROM myprofile c WHERE c.my_id = 1;

my_id немного неоднозначно. Лучшее слово для него было бы profile_id, однако иметь дело с устаревшей базой данных - это не весело.