Объединение результата выборки в одну строку с одинаковыми полями

-=Ronaldo=-
Дата: 20.01.2013 16:27:34
Приветствую! Буду очень признателен за помощь в реализации задачи описанной ниже.

Имеется таблица с разными строками, в которых могут присутствовать одинаковые значения полей

автор
id name age

1 piter 18
2 bred 34
3 silvia 21
4 bred 25
5 alex 34


Выборка осуществляется по полю id и если указывается более одного id, то результат выборки объединяется в одну строку, причём значения полей будут только тогда, когда они одинаковы во всех выбираемых строках, в противном случае null:

SELECT * FROM tbl WHERE id IN (2,4)
автор
id name age
null bred null


SELECT * FROM tbl WHERE id IN (2,5)
автор
id name age
null null 34
tanglir
Дата: 20.01.2013 17:23:34
-=Ronaldo=-,

select 
case when t0.did=1 then null 
 else (select id from table where id in (...) limit 1) as id
,case when t0.dname=1 then null 
 else (select name from table where id in (...) limit 1) as id
,case when t0.dage=1 then null 
 else (select age from table where id in (...) limit 1) as id
from
(select
count(distinct id) did
,count(distinct name) dname
,count(distinct age) dage
from table where id in (...)) t0
Но это в лоб. Сдаётся мне, что можно гораздо проще, но думать сейчас неохота :)
qwerty112
Дата: 20.01.2013 20:50:27
select 
	case when id1=id2 then id1 else null end as id,
	case when name1=name2 then name1 else null end as name,
	case when age1=age2 then age1 else null end as age
from

(select 
	min(id) as id1,
	max(id) as id2,
	min(name) as name1,
	max(name) as name2,
	min(age) as age1,
	max(age) as age2
from t
where id in (2,4)
)a

--- 
select 
	case when id1=id2 then id1 else null end as id,
	case when name1=name2 then name1 else null end as name,
	case when age1=age2 then age1 else null end as age
from

(select 
	min(id) as id1,
	max(id) as id2,
	min(name) as name1,
	max(name) as name2,
	min(age) as age1,
	max(age) as age2
from t
where id in (2,5)
)a

id          name                 age
----------- -------------------- -----------
NULL        bred                 NULL

id          name                 age
----------- -------------------- -----------
NULL        NULL                 34
-=Ronaldo=-
Дата: 21.01.2013 00:09:19
Спасибо! Забыл уточнить, а если столбцы заранее неизвестны, то только через курсор? Т.е. хотелось бы получить универсальный запрос для разных таблиц.
Akina
Дата: 21.01.2013 09:14:11
-=Ronaldo=-
а если столбцы заранее неизвестны, то только через курсор?
То есть что такое курсор - не знаю, но слово солидное, авось подойдёт? а вот фигвам...
Prepared Statement.

-=Ronaldo=-
хотелось бы получить универсальный запрос для разных таблиц.
Чем универсальнее, тем хреновее работает. Исключения редки - и это явно не твой случай.
-=Ronaldo=-
Дата: 22.01.2013 20:34:38
Универсальность решил реализовать через PHP. Всем спасибо!