Innodb

我有 2 個父表和 1 個子表,我想執行一個涉及父母雙方的查詢

  • January 16, 2017

我有一張表,其中包含有關用於釀造的不同類型啤酒花的資訊,另一張表包含用於描述啤酒花的香氣列表。我製作了第三個表,其中包含一個主鍵和兩個外鍵(一個是 hops 表的主鍵,一個是芳香表的主鍵)。我將其設置為兩個表,因為任何啤酒花品種都可能有多個香氣描述符,並且任何香氣都可能適用於多個啤酒花品種。

兩個父母的孩子是通過以下方式創建的:

CREATE TABLE IF NOT EXISTS aromareference 
( ID int(5) NOT NULL AUTO_INCREMENT,
 HopsID int(5) DEFAULT NULL, 
 DescriptorID int(5) DEFAULT NULL, 
 CONSTRAINT FOREIGN KEY (HopsID) 
   REFERENCES hops (ProductID), 
 CONSTRAINT FOREIGN KEY (DescriptorID) 
   REFERENCES hopsdescriptors (DescriptorID), 
 PRIMARY KEY(ID)
);

hops 表有一個名為 HumanName 的列,hopsdescriptors 表也是如此。我想使用 hops 表中的 HumanName 執行查詢,以從 hopsdescriptors 表中列出所有適用的香氣的 HumanName。

作為範例輸出,我會尋找類似的東西:

+------------+
| Centennial |
+------------+
| Floral     |
| Citrus     |
+------------+

相關表格的基本結構如下:

CREATE TABLE IF NOT EXISTS hops 
('ProductID' int(5) NOT NULL AUTO_INCREMENT,
'HumanName' varchar(50) DEFAULT NULL,
'ShortDescript' varchar(500) DEFAULT NULL,
'PrimaryUse' int(1) DEFAULT NULL,
'AlphaAcidMin' float(5,2) DEFAULT NULL,
'AlphaAcidMax' float(5,2) DEFAULT NULL,
'CohumuloneMin' int(3) DEFAULT NULL,
'CohumuloneMax' int(3) DEFAULT NULL,
PRIMARY KEY ('ProductID')
);

CREATE TABLE IF NOT EXISTS hopsdescriptors
('DescriptorID' int(5) NOT NULL AUTO_INCREMENT,
'HumanName' varchar(20) DEFAULT NULL,
'ShortDescript' varchar(500) DEFAULT NULL,
PRIMARY KEY ('DescriptorID')
);

我想這是一個非常常見的查詢,但是我對這些東西是全新的,我什至無法清楚地考慮這個問題來Google它。

使用aromareferencetable 從兩個表中獲取所有引用的記錄,hops並且hopsdescriptors.

然後按 hops.HumanName(或任何 hops 或 hopsdescriptors 欄位)過濾記錄,並顯示所需的列。

SELECT hd.HumanName
FROM aromareference a
    INNER JOIN hops h ON a.HopsId = h.ProductId
    INNER JOIN hopsdescriptors hd ON a.DescriptorID = hd.DescriptorID
WHERE h.HumanName = 'Centennial'

引用自:https://dba.stackexchange.com/questions/161155