看板 Database 關於我們 聯絡資訊
※ 引述《azureshin (azureshin)》之銘言: : 之前有在PHP版問過,後來才發現有DB版...=.=,所以改來這邊問 : 假設有兩個資料表(A_table、B_table) : A_table有一個欄位,名稱為class_id : B_table有二個欄位,名稱為class_id、class_name : 資料關聯部份,A_table的class_id來源是從B_table來的 : A_table只有"一筆"資料,class_id值為10,20,30 : B_table內有30筆資料,class_id分別為1~30 : 我left join 要怎寫才能正確從B_table找出資料 ? : 如果是用下面這種方法是不行的,因為A_table的class_id值有逗號區隔著. : select B_table.class_name from B_table : left join A_table on B_table.class_id = A_table.class_id 不知道MYSQL的語法是什麼,不過用MSSQL或著外部的程式語言的話 最簡單的做法是用程式組合SQL再去執行 =========================================================================== MSSQL DECLARE @Condition nvarchar(100) --宣告條件式變數 SELECT TOP 1 @Condition = class_id FROM A_table --把TableA的值取出來 DECLARE @Sql nvarchar(500) --實際要執行的Sql SET @Sql = N'SELECT * FROM B_table WHERE class_id IN (' + @Condition + ')' EXECUTE @Sql --把該字串當成SQL去執行 =========================================================================== MYSQL用類似的語法也可完成您要的效果 又或著是用其他語言(ASP.NET or PHP) 做一個組合SQL的動作 再把組合好的SQL送進資料庫 PS: 能這樣用是因為正好class_id為數字 且是用,分割 如果是用其他符號分割的話, 那做法就會比較複雜 用CHARINDEX(取得char的index) 與 SUBSTRING(用INDEX分割字串) 去拆解a_Table的class_id 並使用迴圈,把拆解出來的字串 Insert 到 暫存資料表中 之後在用暫存資料表去JOIN -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.131.43 ※ 編輯: ThreeDay0905 來自: 111.249.131.43 (09/30 20:34)