Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ^Tifa^

#311
Código (sql) [Seleccionar]


DECLARE @NombreTabla AS Varchar(50);
SET @NombreTabla = 'tblUsuario';

SELECT FK.TABLE_NAME AS 'Nombre Tabla',
   CU.COLUMN_NAME AS 'Columna Llave Foranea',
   PK.TABLE_NAME AS 'Tabla Llave Primaria',
   PT.COLUMN_NAME AS 'Columna Llave Primaria',
   C.CONSTRAINT_NAME AS 'Entidad Relación'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
  INNER JOIN( SELECT TC.TABLE_NAME, CU.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
   ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
  ) PT
    ON PT.TABLE_NAME = PK.TABLE_NAME
  WHERE PK.TABLE_NAME = @NombreTabla




No te olvides del punto y coma que separa las consultas  ;)
#312
CitarEntonces MUL no simpre significa que sera un FK .. si es asi entonces cual es la forma indicada para saber cuando es una FK.

MUL no hace referencia a cuando un indice es una llave foreanea o no, es sencillamente una caracteristica de ese indice que dice que ese campo puede guardar valores repetidos que pueden ser NULL o pueden ser valores reales repetidos (siempre y cuando ese indice no sea UNIQUE sino INDEX o KEY)

No me consta que existe la caracteristica FK en las descripciones de las tablas, ya que esto no es una caracteristica de un indice.

CitarEsto no anda..
Citar
SHOW TABLE STATUS\G

No??? que version de MySQL es??

Bueno te sirve SHOW CREATE como ya viste y igual te sirve indagar en el esquema information_schema :

select * from tables where table_name = 'tu_tabla'\G

Si existe una forma de utilizar alguna clausula de descripcion en una tabla para que te exponga su relacion de FK con otra tabla, yo particularmente no la he visto, existen consultas como las que te expongo que te muestran esa informacion, pero en la descripcion basica de una tabla (DESCRIBE TABLE) no...

Ah no ser que hagas uso de las consultas que te digo, o guardar esa info en variables como expone tooRllehS@xelA   o crear un procedimiento, una funcion UDF en fin... para guardar esto. Pero particularmente existe un comando dentro ya del motor para ello... No hasta lo que me consta.
#313
CitarMUL (esto indica que es una relacion)

MUL indica que un indice puede contener valores repetidos no unicos. Digase un indice UNIQUE no puede contener valores repetidos pero, si puede contener valores NULL repetidos que es lo que indica MUL que un indice puede contener valores repetidos  ;)


Citarquiero saber si existe alguna forma de saber el nombre de la tabla y el campo que se unen con esa relacion.

SHOW TABLE STATUS\G

SHOW CREATE TABLE nombre_tabla\G

#314
Bases de Datos / Re: Registros duplicados
2 Marzo 2010, 00:58 AM
Disculpa... en el momento que respondia aca estaba en el trabajo, y me era dificil coordinarme de tantas maneras y ofrecerte una respuesta valida.

Oracle por otro lado es muy estricto con su sintaxis.... no tanto como MySQL.

Intenta hacer esto:



SELECT
     EMPRESA.CIFNIF,
     CABALBARAN.CLIENTE,
     CLIENTES.NOMBRE,
     DETALBARAN.IDALBARAN,
     CABALBARAN.FECHA,
     (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO",
     (SELECT
SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO"

FROM
     EMPRESA,
     CLIENTES,
     DETALBARAN,
     CABALBARAN 

WHERE
    CABALBARAN.CLIENTE =16
    AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10'
    AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN
    AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE
GROUP BY (EMPRESA.CIFNIF,  CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA )



Ocurre ser que en los JOINS de varias tablas en Oracle, en GROUP BY hay que incluir todos los campos especificados del SELECT, ya que el tiene que agrupar elementos unicos por cada tabla incluida en el JOIN.

Tambien puedes obviar GROUP BY y utilizar la clausula DISTINCT despues del SELECT y antes de los campos es otra manera.

Dime si te funciona
#315
Bases de Datos / Re: Registros duplicados
1 Marzo 2010, 19:32 PM
sql server no???

aveces detesto los motores tan explicitos  :¬¬ 

Utiliza otro campo en GROUP BY que no utilizes aca:

CABALBARAN.CLIENTE =16
    AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10'
    AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN
    AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE

pero que exista en una de las tablas.
#316
Bases de Datos / Re: Registros duplicados
1 Marzo 2010, 19:16 PM
Valgame... no han utilizado llaves primarias ni unicas ahi  :-\  porque tienes datos redundantes y eso no es correcto. (aunque no te culpo)  :rolleyes:

A tu consulta SQL agregale GROUP BY CLIENTE por ejemplo  :P mas o menos:

SELECT
     EMPRESA.CIFNIF,
     CABALBARAN.CLIENTE,
     CLIENTES.NOMBRE,
     DETALBARAN.IDALBARAN,
     CABALBARAN.FECHA,
     (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO",
     (SELECT
SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO"

FROM
     EMPRESA,
     CLIENTES,
     DETALBARAN,
     CABALBARAN 

WHERE
    CABALBARAN.CLIENTE =16
    AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10'
    AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN
    AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE
GROUP BY
CLIENTE

#317
Bases de Datos / Re: Datos del Sistema con MySQL
28 Febrero 2010, 02:25 AM
Consultas SQL me temo que no, consultas hacia la terminal del sistema operativo si  ;)

Recuerda que la base de datos, solo tiene sus propios comandos internos y sirve para recibir peticiones de consulta... mas info de la ubicacion de una carpeta no. Solo info de si misma.

Pero si es posible (al menos en MySQL y Oracle y DB2) asumo que en SQL Server igual, ejecutar comandos del sistema dentro del motor y que este te retorne  ;)
#318
Bueno siempre es buscarle la vuelta al asunto

Un besito para mi  :D

Grax.
#319
Foro Libre / Re: Duda con Pasaporte
27 Febrero 2010, 21:03 PM
Bueno sabes lo que debes hacer  ;)  pero tambien sabes que si dice hora de llegada 6:05 am se refiere a Brazil porque estaras en Brazil no en Espana ni Roma.

y cual es la ocasion de visita  :P
#320
Foro Libre / Re: Duda con Pasaporte
27 Febrero 2010, 20:57 PM
Si pero tienes siempre que fijarte en la hora de llegada, todos los boletos lo tienen aun sea a un pueblo que viajes dentro de tu mismo pais. Sino como le dices al que va a recogerte ve por mi a tal hora....

Considerare que a lo mejor tomaste un Taxi en Londres y por eso obviaste la hora que llegaste, pero si vas a viajar sin duda querras saber a que hora llegas a destino. Pero si el boleto dice 6:05 am es porke llegaras a las 6:05 am en ese vuelo que esta pronosticado a llegar a esa hora a brazil, independientemente de que diga 11, 20, 15 horas de vuelo, la hora de llegada no se confunde.