作者ThreeDay0905 (三天)
看板Database
标题Re: [SQL ] left join查询问题
时间Thu Sep 30 19:57:26 2010
※ 引述《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)