Jump to content
php.lv forumi

double query


nemec

Recommended Posts

SELECT 
		(SELECT 

			 z.`added`, z.`name`
		FROM `table2` AS z
		WHERE
			z.`cat_id`=ca.`id`
	   LIMIT 1) topic,
	   ca.name

	FROM
	`table1` AS ca

izdod taadu erroru: "Operand should contain 1 column(s) ".

vinjam nepatiik, ka otrajaa selectaa njemu divus ierakstus.

kaut kur droshi vien kljuuda pieprasiijumaa.

Link to comment
Share on other sites

Nedaudz grūti saprast kveriju (nezinot tabulas relācijas un vēlamo rezultātu), bet ja pareizi uztveru tad tu gribi tos divus laukus aliasot kā 'topic'?

 

Nu tad workarounds varētu būt concatenot

 

... (SELECT CONCAT(z.`added`, z.`name`) FROM `table2` AS z WHERE z.`cat_id`=ca.`id` LIMIT 1) topic ....

 

Un būs viens lauks subselectā..

 

 

 

Bet ja savādāk savādāk drizāk kaut kā šādi:

 

SELECT z.`added`, z.`name`, ca.name FROM `table2` AS z, `table1` AS ca WHERE z.`cat_id`= ca.`id`

 

Tb netaisīt subselectus bet joinus.. lai gan tad ar jāzin kādi dati ir tabulā.

Link to comment
Share on other sites

es nesaprotu kaapeec subselect var atgriezh tikai vienu veertiibu.

var jau izmantot concat vai concat_ws, bet tas tak ir cherez zh...

taa ir tikai dalja no mana pieprasiijuma - taa ir atbilde uz jautaajumu 'prieksh kam man subselecti'

Link to comment
Share on other sites

Nu un kā to nevar saprast !? Tu veic selektu, kur kolonnas vērtība ir subselekta rezultāts.. attiecīgi subselektam IR JĀATGRIEŽ tikai VIENA rinda UN viena kolonna! basta...!

 

čerez ž... izskatās tavs pieprasījums, jo tur ir tipisks JOIN... tavā subselekta vispār nav nekas specifisks un pārdabisks...

Edited by Delfins
Link to comment
Share on other sites

Tāpēc, ka subselecti rezultāt atgriež šādi:

 

(select ...) as x

 

Kā, tavuprāt, tas varētu atgriezt divus ?

 

Tas ir tāpāt kā funkcijas atgriež tikai vienu rezultātu (Protams, var jau ar masīviem utt, bet tas jau ir cits stāsts).

 

nemec, labāk pastāsti, ko vajag dabūt gatavu.

Edited by andrisp
Link to comment
Share on other sites

atradu te pat forumaa

UPDATE (
SELECT user_id, sum( kaaposti_h ) AS summa
FROM t2
GROUP BY user_id
) summary, t1
SET t1.kaaposti = t1.kaaposti + summary.summa 
WHERE t1.id = summary.user_id;

kas tur diez taads iipash, ka es gribu divas veertiibas

Link to comment
Share on other sites

it kā tādu SQL mysql pieļauj... UPDATE (select ...) SET ... WHERE..

Bet es neesmu pārliecināts vai to tiešām tā vajag darīt. Nu nesmuki...

 

Ja atbild uz nemec jautājumu, tad UPDATE un SELECT gadījuma tur 2 dažādas interpretācijas - pie UPDATE tiek veidots temp rezultāts, bet pie SELECT rezultāts tiek atgriezts kolonnā. Nu nesmuki ta darīt... kāpēc jāpilda 1000x subselekti, ja joins visu pats izdarīs?

Link to comment
Share on other sites

Vai tad parasti selektu selektā neizmanto tad, kad nepieciešams izselektēt kautko, kur vērtība ir kautkas no citurienes, karo4 piem:

SELECT j.jautajums FROM `jautajumi` j WHERE lang=(SELECT id FROM `valodas` WHERE name='{$_GET['lang']}' LIMIT 1 )

domāju aptuveni tā, ka aiz SELECT parasti raksta izselektējamās kolonas, ne?

šajā gadījumā, ja nepieciešams piem divas valodas (piemērs stulbs, bet pieņemam, ka divām valodām ar dažādiem id ir vienādi nosaukumi)

SELECT j.jautajums FROM `jautajumi` j WHERE lang=ANY(SELECT id FROM `valodas` WHERE name='{$_GET['lang']}')

Link to comment
Share on other sites

SELECT 
		(SELECT 

			 z.`added`, z.`name`
		FROM `table2` AS z
		WHERE
			z.`cat_id`=ca.`id`
	   LIMIT 1) topic,
	   ca.name

	FROM
	`table1` AS ca

 

Šis ko Tu vēlies dabūt saucās skalārie apakšvaicājumi (scalar subquery) un tie var atgriezt tikai vienu vērtību. Šis apakšvaicājumu veids ir aprakstīts šeit http://dev.mysql.com/doc/refman/5.1/en/sca...subqueries.html

Tur tā īpaši uzsvērts nav, ka var būt tikai viena vērtība, bet acīmredzot tā tomēr ir. Tā kā es vairāk kaut ko sajēdzu no Oracle, tad tur ir analogi, kas ir aprakstīti šeit http://download.oracle.com/docs/cd/B19306_....htm#sthref2680

Un Oracle aprakstā ir rakstīts apmēram tas pats, tikai uzsvērts, ka "A scalar subquery expression is a subquery that returns exactly one column value from one row".

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

×
×
  • Create New...