联盟所有数据不受管理

时间:2018-04-09 11:11:24

标签: sql postgresql

请原谅我,如果这个问题已经问过,这里的db家伙不多, 这是我试过的,

select row_number() over (partition by name order by challanto_date) , * 
from (
    select
        rma,
        p.id,
        p.name,
        challanto_date,
        CURRENT_TIMESTAMP as fromDate
    from challan_to_vendor cv
    left join challan_to_vendor_detail cvd on cv.id = cvd.challan_to_vendor_id 
    inner join main_product p on p.id = cvd.product_id
    union all
    select 
        rma, 
        p.id, 
        p.name, 
        CURRENT_TIMESTAMP as toDate, 
        challan_date
    from challan_from_vendor cv
    left join challan_from_vendor_detail cvd on cv.id = cvd.challan_from_vendor_id
    inner join main_product p on p.id = cvd.product_id
) as a

这是我的创建表脚本:

challan_from_vendor

  CREATE TABLE public.challan_from_vendor
  (
  id character varying NOT NULL,
  date_ad date,
  rma integer DEFAULT 1,
  CONSTRAINT psk PRIMARY KEY (id)
  )

challan_from_vendor_detail

CREATE TABLE public.challan_from_vendor_detail
 (
 id character varying NOT NULL,
 challan_from_id character varying,
 product_id character varying,
 CONSTRAINT psks PRIMARY KEY (id),
 CONSTRAINT fsks FOREIGN KEY (challan_from_id)
     REFERENCES public.challan_from_vendor (id) MATCH SIMPLE
     ON UPDATE NO ACTION ON DELETE NO ACTION
 )

challan_to_vendor;

CREATE TABLE public.challan_to_vendor
(
 id character varying NOT NULL,
 date_ad date,
 rma integer DEFAULT 1,
 CONSTRAINT pk PRIMARY KEY (id)
)

challan_to_vendor_detail

CREATE TABLE public.challan_to_vendor_detail
 (
 id character varying NOT NULL,
 challan_to_id character varying,
 product_id character varying,
 CONSTRAINT pks PRIMARY KEY (id),
 CONSTRAINT fks FOREIGN KEY (challan_to_id)
    REFERENCES public.challan_to_vendor (id) MATCH SIMPLE
    ON UPDATE NO ACTION ON DELETE NO ACTION
 )

产品

    CREATE TABLE public.product
 (
 id character varying NOT NULL,
 product_name character varying,
 CONSTRAINT pks PRIMARY KEY (id)
 )

这是我的表结构和欲望输出。

challan_from_vendor

| id       | rma | date |
|:-----------|------------:|:------------:|
| 12012       |        0001 |     2018-11-10    
| 123121       |        0001 |     2018-11-11

challan_to_vendor

| id       | rma | date |
|:-----------|------------:|:------------:|
| 12       |        0001 |     2018-12-10    
| 123       |        0001 |     2018-12-11

challan_from_vendor_detail

 | id       | challan_from_vendor_id | product_id |
|:-----------|------------:|:------------:|
| 121       |  12012       | 121313        
| 1213       |   12012     |  131381

challan_to_vendor_detail

challan_from_vendor_detail

| id         | challan_to_vendor_id | product_id |
|:-----------|------------------------|:------------:|
| 121        |  12                    | 121313        
| 1213       |   123                  |  131381

产品

  | id         | product_name | 
|:-----------|------------:|
| 191313       |    apple   |
| 89113       |      banana |

输出

| ram         | product_id | challan_from_date | challan_to_date|
|:-----------|------------:|:-----------------:|:--------------:|
| 0001       |       191313|     2018-11-10    |2018-11-11      |     
| 0001       |       89113 |     2018-12-10    |2018-12-11      |     

1 个答案:

答案 0 :(得分:0)

您尝试过的查询中有一些奇怪的内容,因此不清楚哪些表,它们如何相关或这些表中的列是什么。

所以通过一些猜测,我可以从这开始:

select
    main_product.*,
    challan_to_vendor.toDate,
    challan_from_vendor.fromDate
from main_product
join challan_to_vendor using(product_id)
join challan_from_vendor using(product_id)

如果您向您的数据库详细解释了您想要的内容,我可以为您提供更多帮助。

编辑:所以我无法在我的数据库中运行你的create语句,因为在其他小事之间存在命名冲突。以下是我发现有用的创建过程的一些建议:

  • 让id为integer而不是character varying,否则它可能是名称列,不应命名为id。您还在示例中使用了integer-id。
  • 使用SERIAL PRIMARY KEYsee tutorial)来帮助您创建密钥。这也消除了命名冲突,因为约束被赋予隐式唯一名称。
  • 在所有地方对相同的事物使用相同的列名,以避免混淆,因为在连接后加上多个称为id的东西,以及它简化了连接。例如,产品的id应该在所有地方product_id,这样您就可以使用using(product_id)作为加入条件。

因此,根据上面给出的建议,我将如何创建您的一个表然后查询它们:

CREATE TABLE public.challan_to_vendor_detail
(
    challan_to_vendor_detail_id SERIAL PRIMARY KEY,
    challan_to_vendor_id integer,
    product_id integer,
    CONSTRAINT fks FOREIGN KEY (challan_to_vendor_id)
    REFERENCES public.challan_to_vendor (challan_to_vendor_id) MATCH SIMPLE
    ON UPDATE NO ACTION ON DELETE NO ACTION
);

select
    product_name,
    challan_to_vendor.date_ad as date_to,
    challan_from_vendor.date_ad as date_from
from product
join challan_to_vendor_detail using(product_id)
join challan_to_vendor using(challan_to_vendor_id)
join challan_from_vendor_detail using(product_id)
join challan_from_vendor using(challan_from_vendor_id)

不幸的是,整体数据库设计对我来说没有意义,所以我不知道这是不是你期望的。

祝你好运!