我正在構建一個類似於here的數據庫,其中我有不同類型的產品,每種類型都有其自己的屬性。從子類中選擇產品:我需要多少個查詢?
我報告一個短版爲了方便
product_type
============
product_type_id INT
product_type_name VARCHAR
product
=======
product_id INT
product_name VARCHAR
product_type_id INT -> Foreign key to product_type.product_type_id
... (common attributes to all product)
magazine
========
magazine_id INT
title VARCHAR
product_id INT -> Foreign key to product.product_id
... (magazine-specific attributes)
web_site
========
web_site_id INT
name VARCHAR
product_id INT -> Foreign key to product.product_id
... (web-site specific attributes)
這樣,我並不需要作出巨大的表,針對不同類型產品的每個屬性的列(其中大部分,然後將NULL)
我如何SELECT
一個產品product.product_id
並查看其所有屬性? 我是否必須首先進行查詢以瞭解我正在處理的產品類型,然後通過某種邏輯對另一個查詢JOIN
正確的表格進行查詢?或者有沒有辦法將所有的東西結合在一起? (如果當我檢索有關product_id的信息時有很多NULL,那麼在這一點上就沒問題了)。
謝謝
另外,使用w。*和m。*將重新包含您可能已包含的公共列。 – BradC 2010-05-20 16:58:18
謝謝!有用。 我對SQL很新,我對LEFT JOIN的存在感到困惑。現在我明白了! 然而正確的方式大概是這樣的: LEFT JOIN雜誌M於m.product_id = p.product_id LEFT JOIN WEB_SITE W於w.product_id = p.product_id 由於PRODUCT_ID在產品表獨特的,他們也在所有子表中都是唯一的,所以不需要magazine_id或web_site_id。 同樣,我沒有看到product_type表的需要。我可以在產品表中添加一個屬性 – Stefano 2010-05-21 09:19:55
@Stefano:1)我加入了'product_type',因爲它在那裏。 2)關於連接你是正確的,我使用了錯誤的列名。現在已經糾正了。 3)爲什麼你有*兩個*屬性來唯一標識一個雜誌(顯然是'magazine_id'和'product_id')?這種設置對我來說毫無意義。 'product_id'在不同產品類型中是唯一的,所以在每種產品類型中都不需要另一個唯一的ID。 – Tomalak 2010-05-21 12:06:49