+2

Como fazer um SELECT como uma subquery (aninhado) para o MySQL?

criado por Lucas Tiago de Moraes em 20/07/2009 11:58pm
Gostaria de saber como faço um select aninhado? Eu vi alguns exemplos na internet mas não funcionaram, exemplo:

SELECT campo1, campo2, (SELECT * FROM subcategoria) FROM categoria

Lista de Respostas:

+1
23/07/2009 9:01am
(~14 anos atrás)
Carlos Rodrigues respondeu:
SELECT cat.campo1, cat.campo2, (SELECT * FROM subcategoria sub where sub.codigo = cat.fk_subcodigo ) FROM categoria cat

Seria isso mas depende da versão do mysql acho que isso o é possivel a partir da versão 5.

qualquer duvida manda ae.


Carlos Rodrigues

0
21/07/2009 2:46pm
(~14 anos atrás)
Tulio valeu por responder, mais eu quero saber por curiosidade e não por nessidade, pq eu sei chamar duas tabelas com JOIN, mais ainda continua a duvida se da para fazer o select aninhado.

mais valeu.

0
21/07/2009 2:48pm
(~14 anos atrás)
SELECT campo1_da_tbl_categoria, campo2_da_tbl_categoria,
campo1_da_tbl_subcategoria, campo2_da_tbl_subcategoria
FROM categoria c, subcategoria sb
WHERE c.codigo_tbl_categoria = sb.codigo_tbl_subcategoria; 

Tipo no caso do categoria c e subcategoria sb, é para o caso de se vc estiver
usando o mesmo nome em tabelas distintas, por ex. codigo em duas tabelas,
ai vc faria o WHERE usando o apelido dado a tabela.
WHERE c.codigo = sb.codigo;


0
21/07/2009 2:50pm
(~14 anos atrás)
tp, pelo que sei, e fiz alguns testes aqui, ele soh executa se o select retornar
apenas uma linha, oq é a mesma coisa que igualar.

Hehehehe, não sei não meu, abraçoss,

0
21/07/2009 2:53pm
(~14 anos atrás)
Eu acho que é impossivel select aninhados em mysql.
Quem chegar com resposta é fera rsrsrss!

0
21/07/2009 3:03pm
(~14 anos atrás)
Tu já usou UNION?

acho que da no mesmo não?


0
23/07/2009 3:28pm
(~14 anos atrás)
Carlos eu tendei mais não obteve sucesso

eu fiz que vc me pediu

SELECT c.id, c.categoria, (SELECT * FROM subcategoria AS s WHERE s.id_categoria = c.id) FROM categoria AS c WHERE c.id = '$id'

da esse erro

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\braganca\teste1.php on line 5

mais valeu por responder

0
25/04/2011 9:00pm
(~13 anos atrás)
Juarez Turrini respondeu:
Sei que foi postado a muito tempo mas p/ consultas posteriores vou responder aqui ao tópico:

SELECT noticia, (SELECT nomecategoria FROM categoria WHERE iddepartamento = noticiadepartamento LIMIT 0, 1) AS odepartamento FROM noticias;

É claro que as tabelas são ficctícias e bem bizarras, mas a idéia fica visível. Você coloca o seu subselect no código e define um nome p/ o resultado através do AS.

Utilizo o Mysql 5 e funciona normalmente.

-1
21/07/2009 2:34pm
(~14 anos atrás)
Query Aninhada para popular uma tabela extraindo os dados de outra:
INSERT INTO nomedatabela(SELECT codigo, nome FROM nome_da_tabela_origem);
Tente assim:
SELECT campo1_da_tbl_categoria, campo2_da_tbl_categoria, campo1_da_tbl_subcategoria, campo2_da_tbl_subcategoria FROM categoria c, subcategoria sb WHERE codigo_tbl_categoria = codigo_tbl_subcategoria;
Ou, use sem a condição.
---------------------------
Acredito que seria melhor fazer uma tabela apenas para as categorias e subcategorias, e fazer um campo onde informaria em qual categoria ela se liga.
tipo assim:

CREATE TABLE `categoria` (
  `codigo_cat` int(9) NOT NULL auto_increment,
  `nome_cat` varchar(155) NOT NULL,
  `ligada_a_cat` int(9) NOT NULL,
  PRIMARY KEY  (`codigo_cat`)
) ENGINE=MyISAM;
Ai no caso, as categorias que tem ligada_a_cat = 0 são categorias raiz,
e as que tem > 0 são subcategoria da categoria em si.

-1
21/07/2009 2:36pm
(~14 anos atrás)
SELECT campo1_da_tbl_categoria, campo2_da_tbl_categoria,
campo1_da_tbl_subcategoria, campo2_da_tbl_subcategoria
FROM categoria c, subcategoria sb
WHERE codigo_tbl_categoria = codigo_tbl_subcategoria; 

-1
21/07/2009 2:41pm
(~14 anos atrás)
Acredito que vc já tenha uma conexão com o banco de dados,
coloco o código abaixo dentro de algum arquivo .php e execute;
mysql_query("CREATE TABLE `categoria` (
  `codigo_cat` int(9) NOT NULL auto_increment,
  `nome_cat` varchar(155) NOT NULL,
  `ligada_a_cat` int(9) NOT NULL,
  PRIMARY KEY  (`codigo_cat`)
) ENGINE=MyISAM;");

Exemplo de conexão com banco de dados. crie um arquivo com o nome de conecta.php
e inclua dentro de onde vc for utilizar o banco da seguinte forma.
<?
include("conecta.php");
?>
Código para conexão com banco de dados.
<?php
	define('DB_HOST', 'localhost'); // Host do banco de dados
	define('DB_USER', 'nome_do_usuario'); // Nome de usuario do mysql
	define('DB_PASS', 'senha'); // Password do mysqç
	define('DB_NAME', 'nome_do_banco'); // Nome do banco de dados
	
	if(!@mysql_connect(DB_HOST,DB_USER,DB_PASS)){
		echo "<center><font size=-1 color=#ff0000>Verifique a conexão! erro!</font></center><br>";
		return(false);
		exit();
	}
	if(!@mysql_select_db (DB_NAME)){
		echo "<center><font size=-1 color=#ff0000>Verifique o banco de dados!</font></center>";
		return(false);
		exit();
		}
	if(mysql_connect(DB_HOST,DB_USER,DB_PASS) && mysql_select_db (DB_NAME)){
		return(true);
	}

	
?>

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)