假設有兩張表:
表1:tab2
id size
1 10
2 20
3 30
表2:tab2
size name
10 AAA
20 BBB
20 CCC
CREATE TABLE [dbo].[tab1](
[id] [int] NULL,
[size] [int] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[tab2](
[size] [int] NULL,
[name] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into tab1(id,size) select 1,10
insert into tab1(id,size) select 2,20
insert into tab1(id,size) select 3,30
insert into tab2(size,name) select 10,'AAA'
insert into tab2(size,name) select 20,'BBB'
insert into tab2(size,name) select 30,'CCC'
select tab1.*,tab2.size,tab2.name from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
但只回傳一條記錄
要求
1.由于系統限制,一定要用 where 陳述句對tab2.name控制,不能放在 left join ON,用什么陳述句會可以實作到如下郊果?
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)
uj5u.com熱心網友回復:
where tab2.name='AAA' or tab2.name is nulluj5u.com熱心網友回復:
測驗過,不可行呢。
uj5u.com熱心網友回復:
select tab1.*,tab2.size,tab2.name from tab1 left join tab2 on tab1.size = tab2.size
where tab2.name='AAA'
UNION
SELECT t1.*,NULL,null FROM tab1 t1 WHERE t1.id != 1
uj5u.com熱心網友回復:
你不要拘泥于程序,看下結果不行嗎?又要控制 name, 又要出一樣的結果, 為什么不直接看結果算了呢?
IF OBJECT_ID('[tab1]') IS NOT NULL
DROP TABLE [tab1]
GO
IF OBJECT_ID('[tab2]') IS NOT NULL
DROP TABLE [tab2]
GO
CREATE TABLE [dbo].[tab1](
[id] [int] NULL,
[size] [int] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[tab2](
[size] [int] NULL,
[name] [varchar](50) NULL
) ON [PRIMARY]
GO
insert into tab1(id,size) select 1,10
insert into tab1(id,size) select 2,20
insert into tab1(id,size) select 3,30
insert into tab2(size,name) select 10,'AAA'
insert into tab2(size,name) select 20,'BBB'
insert into tab2(size,name) select 30,'CCC'
---------- 以上為測驗資料 ---------------
select tab1.*,tab2.size,tab2.name
from tab1 left join tab2
on tab1.size = tab2.size AND tab2.name='AAA'
/*
id size size name
1 10 10 AAA
2 20 NULL NULL
3 30 NULL NULL
*/
uj5u.com熱心網友回復:
用子查詢來處理:SELECT a.*,
b.size,
b.name
FROM tab1 a
LEFT JOIN(SELECT * FROM tab2 b WHERE b.name = 'AAA') b ON a.size = b.size;
uj5u.com熱心網友回復:
你要看一下條件是主表還是從表,如果條件是從表,放在where里,left會自動轉為行內接uj5u.com熱心網友回復:
感謝回復,但由于系統設計的原因,SQL陳述句的tab2.name='AAA'不可以 on 位置,只能放在Where位置。
uj5u.com熱心網友回復:
sql兼容級別是 sql2000(80) 可以用 *=代替left jionSELECT tab1.id,tab1.size, tab2.size ,tab2.name FROM tab1 , tab2 where tab1.size *= tab2.size and tab2.name='AAA'
uj5u.com熱心網友回復:
select tab1.*,tab2.size,tab2.name from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'把 t1 left join t2 換成 t2 left join t1 ,后面的不動。
uj5u.com熱心網友回復:
你要看條件放在哪個位置,放在on跟放在where是有區別的轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/9827.html
標籤:基礎類
下一篇:關于pointnet的資料制作
