我的问题如下,我有一个 postgresql 表,我需要执行一个查询来返回具有各自关系的元组,但是我需要查看名称而不是显示 id,所以我执行以下查询
select i.id, p.codigo_barras, p.descripcion, pro.nombre, u.user_name, fecha, hora, cantidad from ingresos_mercancias i, productos p, proveedores pro, users u
当我进行查询时,它返回了太多的元组,我看到当income_merchandise 表只有5 个元组时它们被重复
我如何让它只返回 5 个元组而不是 id 我放置我想要的字段?
在图像中,我展示了我得到的
这些是有问题的表格
CREATE TABLE familias(
id serial NOT NULL,
nombre varchar(50),
CONSTRAINT pkfamilias PRIMARY KEY (id)
);
CREATE TABLE marcas(
id serial NOT NULL,
nombre character varying(50),
CONSTRAINT pkmarcas PRIMARY KEY (id)
);
CREATE TABLE productos(
id serial NOT NULL, -- Código del producto
id_marca integer NOT NULL,
id_familia integer NOT NULL,
codigo_barras varchar,
descripcion varchar(80), -- Descripcion del producto
precio_costo double precision, -- Precio de costo del producto
precio_venta double precision, -- Precio mayorista del producto
precio_mayorista double precision, -- Precio mayorista del producto
precio_credito double precision, -- Precio crédito del producto
unidad_medida varchar(9),
cant_paquete integer, -- Cantidad por paquete del producto
iva integer, -- Cantidad por paquete del producto
observaciones varchar(200),
descuento double precision, -- Precio mayorista del producto
stock integer, -- Precio mayorista del producto
CONSTRAINT clave_primaria PRIMARY KEY (id),
CONSTRAINT fk_familia FOREIGN KEY (id_familia) REFERENCES familias (id),
CONSTRAINT fk_marca FOREIGN KEY (id_marca) REFERENCES marcas (id)
);
CREATE TABLE proveedores (
id serial primary key,
nombre varchar(60) NOT NULL,
nit_documento varchar(15) NOT NULL,
direccion varchar(80),
contacto varchar(20) NOT NULL,
contacto2 varchar(20),
sitio_web varchar(50),
email varchar(50)
);
CREATE TABLE users (
id serial primary key,
nombre varchar(60) NOT NULL,
password varchar NOT NULL,
user_name varchar(30) NOT NULL,
direccion varchar(80),
telefono varchar(20) NOT NULL,
telefono2 varchar(20),
sitioweb varchar(50),
estado char(1),
email varchar(50),
id_perfil int,
constraint fk_perfil foreign key (id_perfil) references perfiles (id)
);
CREATE TABLE ingresos_mercancias(
id serial NOT NULL, -- Código de la factura cabecera
id_producto integer, -- Código del cliente en la factura cabecera
id_proveedor integer, -- Código del cliente en la factura cabecera
id_user integer, -- Código del cliente en la factura cabecera
fecha date, -- Fecha de emisión de la factura
hora varchar(8),
cantidad integer, -- Monto total a pagar
precio_entrada double precision, -- Estado de la factura
CONSTRAINT pk_ingresos PRIMARY KEY (id),
CONSTRAINT fk_producto FOREIGN KEY (id_producto) REFERENCES productos (id),
CONSTRAINT fk_proveedor FOREIGN KEY (id_proveedor) REFERENCES proveedores (id),
CONSTRAINT fk_id_useri FOREIGN KEY (id_user) REFERENCES users (id)
);
尝试这个:
您需要将 where 与每个 fk(产品 p、供应商 pro、用户 u)及其 pk 的引用一起使用
因为它是根据每个表格的结果显示给你的——
问候。
我已经找到了一个解决方案,它是内部连接,在这里我留下我使用的查询和结果的图像
感谢您的帮助