2016-07-08 105 views
-2

我還是個新手。 我創建了這樣的數據庫:如何在postgresql中編寫查詢? (關係多對多)

DROP DATABASE IF EXISTS image_store_db; 
CREATE DATABASE image_store_db; 

\c image_store_db; 

CREATE TABLE categories_images (
    categories_images_id SERIAL PRIMARY KEY, 
    title VARCHAR NOT NULL, 
    image_url VARCHAR NOT NULL, 
    design_url VARCHAR NOT NULL 
); 

CREATE TABLE images (
    images_id SERIAL PRIMARY KEY, 
    title VARCHAR NOT NULL, 
    rating REAL NOT NULL, 
    image_url VARCHAR NOT NULL, 
    desc_short TEXT NOT NULL, 
    desc_full TEXT NOT NULL 
); 

CREATE TABLE ref_categories_images (
    categories_images_id integer REFERENCES categories_images (categories_images_id) ON UPDATE CASCADE, 
    images_id integer REFERENCES images (images_id) ON UPDATE CASCADE ON DELETE CASCADE, 
    CONSTRAINT ref_categories_images_pkey PRIMARY KEY (images_id, categories_images_id) 
); 

INSERT INTO categories_images(title, image_url, design_url) 
    VALUES ('SIMPLE TITLE TEST', '/TEST_URL.PNG', '/TEST_URL.PNG'); 

INSERT INTO images(title, rating, image_url, desc_short, desc_full) 
    VALUES ('SIMPLE TITLE TEST', 4.5, '/TEST_URL.PNG', 'TEST_SHORT', 'TEST_FULL'); 

請幫助。教我,如何編寫一個查詢:插入(在類圖像),並選擇(從類別ID圖像)等.. 請...

+0

https://www.postgresql.org/docs/current/static/tutorial-populate.html和https://www.postgresql.org/docs/current/static/tutorial-select.html和https:/ /www.postgresql.org/docs/current/static/tutorial-join.html –

回答

0

我的回答假設categories_images是類別表和images是圖像表。表格和屬性名稱似乎表明多對多連接的概念對您來說尚不完全清楚;我會打電話給三個表category,imagecategory_image_map

對於INSERT:如果您的問題是主鍵serial,請使用INSERT ... RETURNING
您可以插入到所有三個表在單個語句:

WITH im(im_id) AS (
     INSERT INTO categories_images ... 
      RETURNING categories_images_id 
    ), 
    cat(cat_id) AS (
     INSERT INTO images ... 
      RETURNING images_id 
    ) 
INSERT INTO ref_categories_images (categories_images_id, images_id) 
    VALUES ((SELECT cat_id FROM cat), (SELECT im_id FROM im)); 

對於查詢,你剛剛加入三個表:

SELECT ... 
FROM categories_images c 
    JOIN ref_categories_images r 
     ON r.categories_images_id = c.categories_images_id 
    JOIN images i 
     ON r.images_id = i.images_id 

,並添加一個WHERE子句的條件,例如

WHERE c.categories_images_id = 42 

WHERE i.image_title = 'Mona Lisa' 
+0

O !!我不能夠感謝你!非常感謝! –