SQL:合并两个 sql 查询
SQL: combining two sql queries
我有两个表:
T_CHAMBRE_CHB (CHB_NUM);
T_PLANNING_PLN (PLN_JOUR ,CHB_NUM, PLN_LIBRE);
我有这些值:
T_CHAMBRE_CHB:
1
2
3
4
T_PLANNIG_CHB:
1 2000-01-12 1 False
2 2000-01-12 2 False
3 2000-01-13 1 False
4 2000-01-13 2 False
5 2000-01-13 4 True
我想获取 2000 年 1 月 13 日的房间信息,如果房间不在计划中(此处为 3),这意味着它是免费的,所以结果应该是:
CHB_NUM PLN_LIBRE
----------- ---------
1 False
2 False
3 True
4 True
我有这个问题:
SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE
FROM T_CHAMBRE_CHB AS TCC,
T_PLANNING_PLN AS TPP
WHERE TCC.CHB_NUM=TPP.CHB_NUM AND TPP.PLN_JOUR = '2000-01-13'
UNION
SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE
FROM T_CHAMBRE_CHB AS TCC,
T_PLANNING_PLN AS TPP
WHERE TCC.CHB_NUM NOT IN (SELECT DISTINCT (TPP2.CHB_NUM) FROM T_PLANNING_PLN AS TPP2);
我得到这个结果:
1 1 False
2 2 False
3 3 False
4 3 True
5 4 True
我不知道为什么我得到第三行 ( 3---->False )
我想我应该使用 OUTER UNION 但 SQL 服务器不喜欢这种语法。
如果我理解你的问题,你必须使用左连接。
请使用以下查询可能对您有所帮助
SELECT T_CHAMBRE_CHB.CHB_NUM, ISNULL(T_PLANNIG_CHB.PLN_LIBRE, FALSE)
FROM T_CHAMBRE_CHB
LEFT JOIN T_PLANNIG_CHB ON (T_CHAMBRE_CHB.CHB_NUM = T_PLANNIG_CHB.CHB_NUM)
WHERE T_PLANNIG_CHB.PLN_JOUR = '2000-01-13'
下面的查询可能会给出所需的结果:-
declare @date as date='2000-01-13'
select distinct TCC.CHB_NUM,COALESCE(TPP.PLN_JOUR,@date) PLN_JOUR,COALESCE(TPP.PLN_LIBRE,'True') PLN_LIBRE
from T_CHAMBRE_CHB TCC
LEFT OUTER JOIN
T_PLANNING_PLN TPP ON TCC.CHB_NUM=TPP.CHB_NUM
WHERE TPP.PLN_JOUR=@date OR TPP.PLN_JOUR IS NULL
输出:-
CHB_NUM PLN_JOUR PLN_LIBRE
1 2000-01-13 False
2 2000-01-13 False
3 2000-01-13 True
4 2000-01-13 True
我有两个表:
T_CHAMBRE_CHB (CHB_NUM);
T_PLANNING_PLN (PLN_JOUR ,CHB_NUM, PLN_LIBRE);
我有这些值:
T_CHAMBRE_CHB:
1
2
3
4
T_PLANNIG_CHB:
1 2000-01-12 1 False
2 2000-01-12 2 False
3 2000-01-13 1 False
4 2000-01-13 2 False
5 2000-01-13 4 True
我想获取 2000 年 1 月 13 日的房间信息,如果房间不在计划中(此处为 3),这意味着它是免费的,所以结果应该是:
CHB_NUM PLN_LIBRE
----------- ---------
1 False
2 False
3 True
4 True
我有这个问题:
SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE
FROM T_CHAMBRE_CHB AS TCC,
T_PLANNING_PLN AS TPP
WHERE TCC.CHB_NUM=TPP.CHB_NUM AND TPP.PLN_JOUR = '2000-01-13'
UNION
SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE
FROM T_CHAMBRE_CHB AS TCC,
T_PLANNING_PLN AS TPP
WHERE TCC.CHB_NUM NOT IN (SELECT DISTINCT (TPP2.CHB_NUM) FROM T_PLANNING_PLN AS TPP2);
我得到这个结果:
1 1 False
2 2 False
3 3 False
4 3 True
5 4 True
我不知道为什么我得到第三行 ( 3---->False )
我想我应该使用 OUTER UNION 但 SQL 服务器不喜欢这种语法。
如果我理解你的问题,你必须使用左连接。
请使用以下查询可能对您有所帮助
SELECT T_CHAMBRE_CHB.CHB_NUM, ISNULL(T_PLANNIG_CHB.PLN_LIBRE, FALSE)
FROM T_CHAMBRE_CHB
LEFT JOIN T_PLANNIG_CHB ON (T_CHAMBRE_CHB.CHB_NUM = T_PLANNIG_CHB.CHB_NUM)
WHERE T_PLANNIG_CHB.PLN_JOUR = '2000-01-13'
下面的查询可能会给出所需的结果:-
declare @date as date='2000-01-13'
select distinct TCC.CHB_NUM,COALESCE(TPP.PLN_JOUR,@date) PLN_JOUR,COALESCE(TPP.PLN_LIBRE,'True') PLN_LIBRE
from T_CHAMBRE_CHB TCC
LEFT OUTER JOIN
T_PLANNING_PLN TPP ON TCC.CHB_NUM=TPP.CHB_NUM
WHERE TPP.PLN_JOUR=@date OR TPP.PLN_JOUR IS NULL
输出:-
CHB_NUM PLN_JOUR PLN_LIBRE
1 2000-01-13 False
2 2000-01-13 False
3 2000-01-13 True
4 2000-01-13 True