判断表中的某个字段, 再决定是否关联另一张表

时间:2022-06-30 14:44:01
有2张表,表1,表2,
表1中有个字段A,
判断A=0 的时候 ,不和表2关联,不为0的时候和表2关联,怎么写啊?

16 个解决方案

#1



select a.* from 
[表1] a left join [表2] b
on a.A=0 and 其它条件

???

#2


和表2关联的是动态的,判断表1中的A字段,为0就不关联表2了,这个sql貌似不是这个意思

#3


SELECT T1.*,T2.* FROM 表1 T1 LEFT JOIN 表2 T2 ON T1.连接字段=T2.连接字段 AND T1.A=0

把条件加上连接上就可以了

#4


引用 2 楼 ltjoy 的回复:
和表2关联的是动态的,判断表1中的A字段,为0就不关联表2了,这个sql貌似不是这个意思

没太明白意思,贴下示例数据,和期望结果

#5


表1:
字段A
字段B

表2:
字段B,
字段C

如果表1.字段A=0
select 
表1.字段A,
'10' AS 字段C
FROM 表1

如果表1.字段A=1
select 
表1.字段A,
表2.字段C
FROM 表1
LEFT JOIN 表2
 ON 表1.字段B=表2.字段B

想到达到这个效果,sql怎么写?

#6


表1:
字段A
字段B

表2:
字段B,
字段C

如果表1.字段A=0
select 
表1.字段A,
'10' AS 字段C
FROM 表1

如果表1.字段A=1
select 
表1.字段A,
表2.字段C
FROM 表1
LEFT JOIN 表2
 ON 表1.字段B=表2.字段B

想到达到这个效果,sql怎么写?

#7


要不我说下我的理解吧
假设表1有两条数据
表1
A  B
1  0
1  2
假设表2也有两条数据
B C
2  4
3  5
那么你要得的数据是不是
A  C
1  10
1  4

#8


你的意思是判断表1中的字段B了,
如果是这样的话,就是这个意思。

#9


顺便解释一下,你是用字段B进行判断并且也作为关联项目了,
最好是判断字段和关联字段不是同一个字段

#10


这样的话,直接在表1 A=0的地方左连接表2就可以了
然后在表1 A不为0的时候就不会把表2连接进来,这时加个ISNULL判断,给为空的加个10,问题就解决了
SELECT T1.A,ISNULL(T2.C,10)AS C FROM 表1 T1 LEFT JOIN 表2 T2 ON T1.B=T2.B AND T1.A=0


我上面写的数据错了

假设表1有两条数据
表1
A  B
0  1
1  2
假设表2也有两条数据
B C
2  4
3  5
那么你要得的数据是不是
A  C
0  10
1  4

#11


如果是下面这种情况呢?
假设表1有两条数据
表1
A  B
0  2 
1  3
假设表2也有两条数据
B C
2  4
3  5
我想要得的数据是
A  C
0  10
1  5
此时表1和表2的关联字段都一样。该怎么写呢

#12


同样的写法~

#13


LEFT JOIN 表2 T2 ON T1.B=T2.B AND T1.A=0
B=2的关联字段关联后,
A B C
0 2 4

T2.C都等于4了,ISNULL(T2.C,10) 就不会变成10了,怎么会一样呢~不明白啊

#14


select t1.c1,t1.c2 from t1 where t1.c1=0
union
select t1.c1,t2.c2 from t1
inner join t2 on t1.c1=t2.c1
where t1.c1<>0


用Union

#15


谢谢,明白了。散分

#16


谢谢你一直的回复。散分。

#1



select a.* from 
[表1] a left join [表2] b
on a.A=0 and 其它条件

???

#2


和表2关联的是动态的,判断表1中的A字段,为0就不关联表2了,这个sql貌似不是这个意思

#3


SELECT T1.*,T2.* FROM 表1 T1 LEFT JOIN 表2 T2 ON T1.连接字段=T2.连接字段 AND T1.A=0

把条件加上连接上就可以了

#4


引用 2 楼 ltjoy 的回复:
和表2关联的是动态的,判断表1中的A字段,为0就不关联表2了,这个sql貌似不是这个意思

没太明白意思,贴下示例数据,和期望结果

#5


表1:
字段A
字段B

表2:
字段B,
字段C

如果表1.字段A=0
select 
表1.字段A,
'10' AS 字段C
FROM 表1

如果表1.字段A=1
select 
表1.字段A,
表2.字段C
FROM 表1
LEFT JOIN 表2
 ON 表1.字段B=表2.字段B

想到达到这个效果,sql怎么写?

#6


表1:
字段A
字段B

表2:
字段B,
字段C

如果表1.字段A=0
select 
表1.字段A,
'10' AS 字段C
FROM 表1

如果表1.字段A=1
select 
表1.字段A,
表2.字段C
FROM 表1
LEFT JOIN 表2
 ON 表1.字段B=表2.字段B

想到达到这个效果,sql怎么写?

#7


要不我说下我的理解吧
假设表1有两条数据
表1
A  B
1  0
1  2
假设表2也有两条数据
B C
2  4
3  5
那么你要得的数据是不是
A  C
1  10
1  4

#8


你的意思是判断表1中的字段B了,
如果是这样的话,就是这个意思。

#9


顺便解释一下,你是用字段B进行判断并且也作为关联项目了,
最好是判断字段和关联字段不是同一个字段

#10


这样的话,直接在表1 A=0的地方左连接表2就可以了
然后在表1 A不为0的时候就不会把表2连接进来,这时加个ISNULL判断,给为空的加个10,问题就解决了
SELECT T1.A,ISNULL(T2.C,10)AS C FROM 表1 T1 LEFT JOIN 表2 T2 ON T1.B=T2.B AND T1.A=0


我上面写的数据错了

假设表1有两条数据
表1
A  B
0  1
1  2
假设表2也有两条数据
B C
2  4
3  5
那么你要得的数据是不是
A  C
0  10
1  4

#11


如果是下面这种情况呢?
假设表1有两条数据
表1
A  B
0  2 
1  3
假设表2也有两条数据
B C
2  4
3  5
我想要得的数据是
A  C
0  10
1  5
此时表1和表2的关联字段都一样。该怎么写呢

#12


同样的写法~

#13


LEFT JOIN 表2 T2 ON T1.B=T2.B AND T1.A=0
B=2的关联字段关联后,
A B C
0 2 4

T2.C都等于4了,ISNULL(T2.C,10) 就不会变成10了,怎么会一样呢~不明白啊

#14


select t1.c1,t1.c2 from t1 where t1.c1=0
union
select t1.c1,t2.c2 from t1
inner join t2 on t1.c1=t2.c1
where t1.c1<>0


用Union

#15


谢谢,明白了。散分

#16


谢谢你一直的回复。散分。