Как использовать ГДЕ в ПРОСМОТРЕ? - PullRequest
0 голосов
/ 15 марта 2020

В myView в базе данных у меня есть:

 SELECT orderhdr3_.id AS col_0_0_,
    gnrlorg2_.id AS col_1_0_,
    gnrlorg2_.name AS col_2_0_,
    gnrlcustom1_.id AS col_3_0_,
    gnrlcustom1_.name AS col_4_0_,
    orderhdr3_.order_no AS col_5_0_,
    orderhdr3_.cust_ref_no AS col_6_0_,
    tripinfo4_.job_no AS col_7_0_,
    orderhdr3_.order_type AS col_8_0_,
    servicetyp5_.code AS col_9_0_,
    tripinfo4_.service_provider_id AS col_10_0_,
    tripinfo4_.service_personnel AS col_11_0_,
    orderhdr3_.status AS col_12_0_,
    orderhdr3_.completed_date AS col_13_0_,
    orderhdr3_.reason_code AS col_14_0_,
    orderhdr3_.remarks AS col_15_0_,
    orderhdr3_.source_order_hdr_location_id AS col_16_0_,
    orderhdrlo7_.unit_no AS col_17_0_,
    orderhdrlo7_.name AS col_18_0_,
    orderhdrlo7_.address AS col_19_0_,
    orderhdrlo7_.postal_code AS col_20_0_,
    orderhdrlo7_.zone AS col_21_0_,
    orderhdrlo7_.contact AS col_22_0_,
    orderhdrlo7_.phone AS col_23_0_,
    orderhdrlo7_.email AS col_24_0_,
    orderhdrlo7_.op_date AS col_25_0_,
    orderhdrlo7_.instruction AS col_26_0_,
    orderhdr3_.dest_order_hdr_location_id AS col_27_0_,
    orderhdrlo6_.unit_no AS col_28_0_,
    orderhdrlo6_.name AS col_29_0_,
    orderhdrlo6_.address AS col_30_0_,
    orderhdrlo6_.postal_code AS col_31_0_,
    orderhdrlo6_.zone AS col_32_0_,
    orderhdrlo6_.contact AS col_33_0_,
    orderhdrlo6_.phone AS col_34_0_,
    orderhdrlo6_.email AS col_35_0_,
    orderhdrlo6_.op_date AS col_36_0_,
    orderhdrlo6_.instruction AS col_37_0_,
    orderdet11_.product_code AS col_39_0_,
    orderdet11_.product_desc AS col_40_0_,
    orderdet11_.order_qty AS col_41_0_,
    orderdet11_.serviced_qty AS col_42_0_,
    orderdet11_.reason_code AS col_43_0_,
    orderhdr3_.active_ind AS col_44_0_,
    tripinfo4_.active_ind AS col_45_0_,
    gnrlorg2_.active_ind AS col_46_0_,
    gnrlcustom1_.active_ind AS col_47_0_,
    commusersc0_.comm_user_id AS col_48_0_,
    orderhdr3_.org_id AS col_49_0_,
    orderhdr3_.customer_id AS col_50_0_,
    orderhdrlo6_.op_date AS col_51_0_,
    orderhdrlo6_.op_date AS col_52_0_,
    orderhdr3_.id AS col_53_0_,
    orderdet11_.order_hdr_id AS col_54_0_,
    orderhdrlo6_.op_date AS col_55_0_,
    tripinfo4_.job_no AS col_56_0_,
    orderhdr3_.seq AS col_57_0_,
    orderhdr3_.order_no AS col_58_0_
   FROM comm_users_customers commusersc0_
     JOIN gnrl_customer gnrlcustom1_ ON commusersc0_.gnrl_customer_id = gnrlcustom1_.id
     JOIN gnrl_org gnrlorg2_ ON gnrlcustom1_.gnrl_org_id = gnrlorg2_.id
     CROSS JOIN order_det orderdet11_
     JOIN order_hdr orderhdr3_ ON gnrlcustom1_.id = orderhdr3_.customer_id
     JOIN trip_info tripinfo4_ ON orderhdr3_.trip_info_id = tripinfo4_.id
     JOIN service_type servicetyp5_ ON orderhdr3_.service_type_id = servicetyp5_.id
     JOIN order_hdr_location orderhdrlo6_ ON orderhdr3_.dest_order_hdr_location_id = orderhdrlo6_.id
     JOIN order_hdr_location orderhdrlo7_ ON orderhdr3_.source_order_hdr_location_id = orderhdrlo7_.id
     JOIN order_hdr_location_time_windows timewindow8_ ON timewindow8_.order_hdr_location_id = orderhdr3_.dest_order_hdr_location_id
     JOIN order_hdr_location orderhdrlo9_ ON timewindow8_.order_hdr_location_id = orderhdrlo9_.id;

В моем коде я хотел бы фильтровать, используя WHERE

SELECT * FROM myView view WHERE view.order_no = ?

, но Java / PostgreSQL выдает ошибку:

ОШИБКА: столбец view.order_no не существует

Пожалуйста, помогите, поскольку это довольно сложно, так как включает в себя несколько таблиц и много столбцов. Я не уверен, почему view.order_no не существует, потому что он выбран в col_5_0

Ответы [ 3 ]

1 голос
/ 15 марта 2020

Вы переименовали столбец order_no в col_5_0_. Поэтому вам нужно использовать это:

SELECT *
FROM myView v
WHERE v.col_5_0_ = ?;

То есть вы можете ссылаться только на столбцы, возвращаемые представлением.

Переименование столбцов в бессмысленные строки кажется очень плохой идеей - - по крайней мере, если взгляды открыты для людей. Мне не ясно, почему кто-то хотел бы их запутать.

Кроме того, не используйте view в качестве псевдонима таблицы (или любого другого идентификатора). Это ключевое слово SQL, и его лучше избегать в качестве идентификаторов.

1 голос
/ 15 марта 2020

Вы можете ссылаться на представление по его имени:

SELECT * FROM myView WHERE id = ?

Также view является ключевым словом в sql.

0 голосов
/ 15 марта 2020

Создайте свое представление таким образом и используйте ссылку на представление в предложении where

CREATE VIEW view_name 
AS
    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;

Вы также можете фильтровать строки во время создания представления.

SELECT * 
FROM view_name 
WHERE view_name.col_name = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...