2013-10-13 63 views
0

我想在Table1加入不同的列(part_type_n(其中n爲1至54)),與同一列(id ,primary,autoinc)Table2MySQL的 - 連接兩個表,不同的列在表1中在同一列於表2

架構:

 
Table1 
============== 
part_type_1 
. 
. 
. 
part_type_54 



Table2 
============= 
id 

我試圖明顯查詢(PHP的產生,到n循環從1至54),在...省略重複的東西:

SELECT * FROM Table1 JOIN Table2 on (Table1.part_type_1=Table2.id), ..., (Table1.part_type_54=Table2.id)

我接收此錯誤:

1066 - 非唯一表/別名:'表2'

我如何加入這兩張桌子?

+0

在這種情況下,使用54個獨立的呼叫而不是單個呼叫會更好嗎? – ina

+0

你真的只想從table1中選擇那些table2記錄匹配所有54個part_type值的記錄嗎? –

回答

0

您將不得不再次自我加入表格。

SELECT * FROM table1 t1 
INNER JOIN table2 t2 on t2.Id=t1.part_type_1 
INNER JOIN table2 t3 on t3.id = t1.part_type_54; 

希望這有助於!

+0

爲什麼內部加入和不加入 – ina

+0

http://stackoverflow.com/questions/448023/what-is-the-difference-between-left-right-outer-and-inner-joins?sort=newest%3E –

+0

JOIN是INNER JOIN的簡寫 - 是否有理由不使用速記 – ina

0

作爲替代書寫與54名錶的別名查詢,你可以考慮加入到表一次 - 就像這樣:

select ... 
from Table1 t1 
join Table2 t2 
    on t2.id in (t1.part_type_1, t1.part_type_2, ... t1.part_type_54) 
0

它的工作對我來說,讓我需要的結果是一排,其中匹配各種類別都存儲在一個表格列中。

查詢

 SELECT cm3.*, xp.post_title,GROUP_CONCAT(DISTINCT sc.name) AS cate_list 
     FROM `xld_posts` xp 
     JOIN course_map cm0 ON cm0.course_id = xp.ID 
     JOIN course_map cm1 ON cm1.course_id = cm0.course_id AND cm0.id = 3 
     JOIN course_map cm2 ON cm2.course_id = cm1.course_id AND cm1.id = 6 
     JOIN course_map cm3 ON cm3.course_id = cm2.course_id AND cm2.id = 11 
     JOIN subject_category sc ON cm3.id = sc.id 
     GROUP by post_title ORDER BY post_title 

注:類別值3,圖6和7是從形式透過了。因此,如果您的表單超過三個或更少,則您的查詢應動態創建,並將每個表與前一個表連接起來。

:)如果有人覺得有用,會很開心。

相關問題