我想在SQL Server 2008数据库中找到两个表:
代码:
CREATE TABLE #_temp
(ATM INT, Fault INT)
CREATE TABLE #_temp1
(ATM INT, Fault INT)
INSERT INTO #_temp VALUES (10,101), (11,101), (12,101), (12,101), (10,105), (13,101)
INSERT INTO #_temp1 VALUES (10,102), (11,101), (12,103), (12,100), (10,105), (13,101)
/* My Try
SELECT * FROM #_temp t RIGHT JOIN #_temp1 t1 ON t.ATM=t1.ATM AND t.Fault=t.Fault AND t.ATM IS NULL AND t.Fault IS NULL
SELECT * FROM #_temp t JOIN #_temp1 t1 ON t.ATM=t1.ATM AND t.Fault=t.Fault
*/
DROP Table #_temp
DROP Table #_temp1
答案 0 :(得分:2)
要查找一个表而不是另一个表中存在的值,您应该使用where子句来确定空值:
Create Table #_temp
(ATM Int,Fault Int)
Create Table #_temp1
(ATM Int,Fault Int)
Insert Into #_temp Values(10,101),(11,101),(12,101),(12,101),(10,105),(13,101)
Insert Into #_temp1 Values(10,102),(11,101),(12,103),(12,100),(10,105),(13,101)
--Values Present in both Table
SELECT t.*
FROM #temp t
INNER JOIN #_temp1 t1
ON t.[ATM Int] = t1.[ATM Int]
AND t.[Fault Int] = t1.[Fault Int]
--Values Present in First Table But not in Second
SELECT t.*
FROM #temp t
LEFT JOIN #_temp1 t1
ON t.[ATM Int] = t1.[ATM Int]
AND t.[Fault Int] = t1.[Fault Int]
WHERE t1.[ATM Int] IS NULL
--Values Present in Second Table But not in First
SELECT t.*
FROM #_temp1 t
LEFT JOIN #temp t1
ON t.[ATM Int] = t1.[ATM Int]
AND t.[Fault Int] = t1.[Fault Int]
WHERE t1.[ATM Int] IS NULL
答案 1 :(得分:1)
Insert Into #_temp Values(10,101),(11,101),(12,101),(12,101),(10,105),(13,101)
Insert Into #_temp1 Values(10,102),(11,101),(12,103),(12,100),(10,105),(13,101)
Select t.* From #_temp t LEFT join #_temp1 t1 on t.ATM=t1.ATM and t.Fault is null
UNION
Select t.* From #_temp1 t left join #_temp t1 on t.ATM=t1.ATM and t.Fault is NULL
Drop Table #_temp
Drop Table #_temp1
答案 2 :(得分:0)
将列重命名为表格应该有效:
SELECT A.ATM AS ATM1, A.FAULT AS FAULT1, B.ATM AS ATM2, B.FAULT AS FAULT2
FROM #_temp as A, #_temp1 as B
ON A.ATM = BUT.ATM
SELECT * FROM #_temp
SELECT * FROM #_temp1
答案 3 :(得分:0)
确切地说你正在寻找什么,另一个
Create Table #_temp
(ATM Int,Fault Int)
Create Table #_temp1
(ATM Int,Fault Int)
Insert Into #_temp Values(10,101),(11,101),(12,101),(12,101),(10,105),(13,101)
Insert Into #_temp1 Values(10,102),(11,101),(12,103),(12,100),(10,105),(13,101)
Select a.*,t.ATM as tATM,t.Fault as tFault,t1.ATM as t1ATM,t1.Fault as t1Fault from
(
Select t.* From #_temp t
UNION
Select t.* From #_temp1 t
) a
LEFT join #_temp t on t.ATM=a.ATM and T.Fault = a.Fault
LEFT join #_temp1 t1 on t1.ATM=a.ATM and T1.Fault = a.Fault
Drop Table #_temp
Drop Table #_temp1