2014-12-19 64 views
1

我有2個表MySQL查詢語法 - 子查詢與裝飾

表1 - > msqt_subjects

 id category 
- 1 maths 
- 2 physics 
- 3 history 
表2 - > msqt_class

 id subjects 
- 1 ,1,2,3,

我的查詢是

選擇id,categorymsqt_subjects其中

它返回僅一排id IN(來自msqt_class其中id = 1選擇TRIM(BOTH '' FROM subjects)),實際上它具有返回3行。

當我單獨運行子查詢時,結果爲1,2,3

我喜歡用單個查詢來代替單獨的查詢。

該查詢是否正確?

+0

那是一個糟糕的DB設計,你應該首先規格化表。 – 2014-12-19 06:17:18

+0

@Abhik你想在課堂表中添加個人記錄的ID嗎? – ranjith 2014-12-19 06:39:40

+0

是的,你應該'find_in_set'等只是解決。當你有大數據集時,你會感覺到規範化的必要性,所以最好從開始就做。用classid和name創建一個表'class',然後創建另一個名爲'class_subject(id pk,classid,subjectid) – 2014-12-19 06:49:02

回答

0

試試這個:

SELECT ms.id, ms.category 
FROM msqt_subjects ms 
INNER JOIN msqt_class mc ON mc.subjects LIKE CONCAT('%,', ms.id, ',%') 
WHERE mc.id = 1; 

OR

SELECT ms.id, ms.category 
FROM msqt_subjects ms 
INNER JOIN msqt_class mc ON FIND_IN_SET(ms.id, TRIM(BOTH ',' FROM mc.subjects)) 
WHERE mc.id = 1;