一个两张表连接查询的SQL语句!

Airad 2009-12-21 07:42:44
item表(明细表):model(主键),name,info

tree表(结构表):id,model,num,pid

tree表就是通常的多级结构表(pid存放id),这里意思是有 num 个 model型号的物料组成上一级。

问题:
输入一个pid,查询该 id物料 由哪些 下级物料 组成,并列出 num,name,info

我的思路是:先查出
Select [model],[num] from [tree] where [pid]=" + PID ;
再根据model连接name info

新手,想不出怎么写。高手指教,谢谢。
...全文
1049 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Airad 2010-01-08
  • 打赏
  • 举报
回复
多谢各位,是一个LEFTJOIN就能解决的,原来写的是对的,但是缓存未清空,一直在运行一个错误的SQL语句。。。
wluser865 2009-12-30
  • 打赏
  • 举报
回复
搞个视图,然后查询起来就快了
antony1029 2009-12-30
  • 打赏
  • 举报
回复
UP
shabble 2009-12-30
  • 打赏
  • 举报
回复
楼主的思路正确
yinjianjing 2009-12-30
  • 打赏
  • 举报
回复
create table #item(model int,name varchar(50),info varchar(50))
create table #tree(id int ,model int,num int,pid int)
insert into #item values(1,'aaa','aaa')
insert into #item values(2,'bbb','bbb')
insert into #item values(3,'ccc','ccc')

insert into #tree values(1,1,500,1)
insert into #tree values(2,2,500,1)
insert into #tree values(3,3,500,3)


select t.pid,t.num,t.model from #item i left join #tree t on i.model=t.model where pid=1

是不是这样的
yinjianjing 2009-12-30
  • 打赏
  • 举报
回复
create table #item(model int,name varchar(50),info varchar(50))
create table #tree(id int ,model int,num int,pid int)
insert into #item values(1,'aaa','aaa')
insert into #item values(2,'bbb','bbb')
insert into #item values(3,'ccc','ccc')

insert into #tree values(1,1,500,1)
insert into #tree values(2,2,500,1)
insert into #tree values(3,3,500,3)


select t.pid,t.num,t.model from #item i left join #tree t on i.model=t.model where pid=1

是不是这样的
gaomiqzhi 2009-12-29
  • 打赏
  • 举报
回复
学习
xcaicaix 2009-12-29
  • 打赏
  • 举报
回复
看这个行不,没测试过
Create PROC
(
@pid int,
)
AS
begin
SELECT t.num,i.name,i.info
FROM item i,tree t
WHERE i.model = t.model and pid = @pid
end
victorcai2006 2009-12-27
  • 打赏
  • 举报
回复
在联机丛书里面输入一个LEFT JOIN 就有LZ想要的了,然后在尝试一下就可以了,主要就是一个BOM的问题
sxiaohui8709253 2009-12-27
  • 打赏
  • 举报
回复
create table tb(id int, name varchar(10), pid int, px int)
insert into tb values(0 , '栏目分类', 0 , 1)
insert into tb values(1 , '动物' , 0 , 1)
insert into tb values(2 , '视频' , 0 , 2)
insert into tb values(3 , '老虎' , 1 , 1)
insert into tb values(4 , '狮子' , 1 , 2)
insert into tb values(5 , '搞笑' , 2 , 1)
请问这里最后一个字段px int是什么意思 能详细解释下么 谢谢
lang071234 2009-12-26
  • 打赏
  • 举报
回复
看的我头疼。
Airad 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guguda2008 的回复:]
早说只要一层啊。。。。一个JOIN就行了
[/Quote]

咋写啊?
guguda2008 2009-12-21
  • 打赏
  • 举报
回复
早说只要一层啊。。。。一个JOIN就行了
Airad 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
需要用到存储过程递归。

如果你的BOM层数有限,比如最多4层,则可以用LEFT JOIN来实现。
[/Quote]

只要某个物料向下一层的物料组成,应该只要一次连接么?
Airad 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fredrickhu 的回复:]
2005用CTE递归
SQL codeUSE tempdbGO-- 建立演示环境CREATETABLE Dept(
idintPRIMARYKEY,
parent_idint,
namenvarchar(20))INSERT DeptSELECT0,0, N'<全部>'UNIONALLSELECT1,0, N'财务部'UNIONALLSELECT2,0, N'行政部'UNIONALLSELECT3,0, N'业务部'UNIONALLSELECT4,0, N'业务部'UNIONALLSELECT5,4, N'销售部'UNIONALLSELECT6,4, N'MIS'UNIONALLSELECT7,6, N'UI'UNIONALLSELECT8,6, N'软件开发'UNIONALLSELECT9,8, N'内部开发'GO-- 查询指定部门下面的所有部门DECLARE@Dept_namenvarchar(20)SET@Dept_name= N'MIS'
;WITH
DEPTSAS(-- 定位点成员SELECT*FROM DeptWHERE name=@Dept_nameUNIONALL-- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归SELECT A.*FROM Dept A, DEPTS BWHERE A.parent_id= B.id
)SELECT*FROM DEPTSGO-- 删除演示环境DROPTABLE Dept



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/19/4569529.aspx
[/Quote]

我只要向下一层的物料明细,应该只要一次连接不?您写的复杂了。
--小F-- 2009-12-21
  • 打赏
  • 举报
回复
2005用CTE递归
USE tempdb
GO

-- 建立演示环境
CREATE TABLE Dept(
id int PRIMARY KEY,
parent_id int,
name nvarchar(20))
INSERT Dept
SELECT 0, 0, N'<全部>' UNION ALL
SELECT 1, 0, N'财务部' UNION ALL
SELECT 2, 0, N'行政部' UNION ALL
SELECT 3, 0, N'业务部' UNION ALL
SELECT 4, 0, N'业务部' UNION ALL
SELECT 5, 4, N'销售部' UNION ALL
SELECT 6, 4, N'MIS' UNION ALL
SELECT 7, 6, N'UI' UNION ALL
SELECT 8, 6, N'软件开发' UNION ALL
SELECT 9, 8, N'内部开发'
GO

-- 查询指定部门下面的所有部门
DECLARE @Dept_name nvarchar(20)
SET @Dept_name = N'MIS'
;WITH
DEPTS AS(
-- 定位点成员
SELECT * FROM Dept
WHERE name = @Dept_name
UNION ALL
-- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
SELECT A.*
FROM Dept A, DEPTS B
WHERE A.parent_id = B.id
)
SELECT * FROM DEPTS
GO

-- 删除演示环境
DROP TABLE Dept



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/19/4569529.aspx
冬眠的小熊 2009-12-21
  • 打赏
  • 举报
回复
学习中^^^
Airad 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
需要用到存储过程递归。

如果你的BOM层数有限,比如最多4层,则可以用LEFT JOIN来实现。
[/Quote]

存储过程递归?怎么写啊?我是新手,请指教谢谢。
--小F-- 2009-12-21
  • 打赏
  • 举报
回复
bom
2000的话:
-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-09-30 08:52:38
set nocount on
if object_id('tb','U')is not null drop table tb
go
create table tb(ID int, ParentID int)
insert into tb select 1,0
insert into tb select 2,1
insert into tb select 3,1
insert into tb select 4,2
insert into tb select 5,3
insert into tb select 6,5
insert into tb select 7,6
-->Title:查找指定節點下的子結點
if object_id('Uf_GetChildID')is not null drop function Uf_GetChildID
go
create function Uf_GetChildID(@ParentID int)
returns @t table(ID int)
as
begin
insert @t select ID from tb where ParentID=@ParentID
while @@rowcount<>0
begin
insert @t select a.ID from tb a inner join @t b
on a.ParentID=b.id and
not exists(select 1 from @t where id=a.id)
end
return
end
go
select * from dbo.Uf_GetChildID(5)
/*
ID
-----------
6
7
*/
-->Title:查找指定節點的所有父結點
if object_id('Uf_GetParentID')is not null drop function Uf_GetParentID
go
create function Uf_GetParentID(@ID int)
returns @t table(ParentID int)
as
begin
insert @t select ParentID from tb where ID=@ID
while @@rowcount!=0
begin
insert @t select a.ParentID from tb a inner join @t b
on a.id=b.ParentID and
not exists(select 1 from @t where ParentID=a.ParentID)
end
return
end
go
select * from dbo.Uf_GetParentID(2)
/*
ParentID
-----------
1
0
*/
Airad 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jack_ailly 的回复:]
SQL code---------------------------
--就用树型表,可到N级.参考如下:createtable tb(idint, namevarchar(10), pidint, pxint)insertinto tbvalues(0 ,'栏目分类',0 ,1)insertinto tbvalues(1 ,'动物' ,0 ,1)insertinto tbvalues(2 ,'?-
[/Quote]

请问我的思路那样的连接查询可以么?
加载更多回复(4)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧