※ 引述《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)