2010-08-26 111 views
1

我有三個下面的表格。關係是,每個report_paramreport_frequency使用中間表report_freq_map連在一起。是否可以構造一個SQL,以便用戶可以使用頻率='每日'等約束來選擇所有的report_param行,而不是使用頻率='1'。如何使用一個查詢查詢相關的三個相關表格

感謝, -Peter

mysql> describe report_params; 
+---------------+------------------+------+-----+---------+----------------+ 
| Field   | Type    | Null | Key | Default | Extra   | 
+---------------+------------------+------+-----+---------+----------------+ 
| id   | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| test_level | varchar(45)  | NO |  | NULL |    | 
| sequence_name | varchar(45)  | NO |  | NULL |    | 
| step_name  | varchar(45)  | NO |  | NULL |    | 
| descriptions | text    | NO |  | NULL |    | 
+---------------+------------------+------+-----+---------+----------------+ 
mysql> describe report_frequency; 
+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| frequency | varchar(25)  | YES |  | NULL |    | 
+-----------+------------------+------+-----+---------+----------------+ 

mysql> describe report_freq_map; 
+-----------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+-----------+---------+------+-----+---------+-------+ 
| report_id | int(11) | NO | PRI | 0  |  | 
| freq_id | int(11) | NO | PRI | 0  |  | 
+-----------+---------+------+-----+---------+-------+ 
+0

一個表中的兩個主鍵?以前沒見過。 – John 2010-08-26 20:31:41

+1

複合主鍵 – 2010-08-26 20:34:44

+2

@John at CashCommons:你讀錯了。這不是兩個主鍵,而是一個由兩列組成的主鍵。 – Jasper 2010-08-26 20:34:54

回答

2

嘗試連接表使用JOIN

SELECT report_params.* 
FROM report_params 
JOIN report_freq_map ON report_id = report_params.id 
JOIN report_frequency ON freq_id = report_frequency.id 
WHERE frequency = 'daily' 
0
SELECT report_params.id, test_level, sequence_name, step_name, descriptions 
FROM report_params 
JOIN report_freq_map 
ON report_params.id = report_id 
JOIN report_frequency 
ON freq_id = report_frequency.id 
WHERE frequency = 'daily' 

(SELECT之後添加DISTINCT,如果你想允許多個frequncy,或者你可能有重複的條目)