我的数据库中有以下3个表格。
Table 1:
A
B
C
D
Table 2:
B
D
E
F
Table 3:
A
B
E
G
我正在寻找一个查询,其中表1与表2和表3进行比较,结果为是或否。
例如:在表1中,我们有' A
'在表2中,我们没有A
'但是' A
'在表3中有,所以结果将是' No
'
但在表1中,我们有' B
'在表2中,我们有' B
'和' B
'在表3中也是如此,结果将是' Yes
'。
此致 维卡斯
答案 0 :(得分:0)
这样的东西?
platform[]
答案 1 :(得分:0)
试试这个:
select colm1,case when count(*) = 3 then 'Yes' else 'No' end Result
from
(SELECT distinct colm1 FROM TAB1
union all
SELECT distinct colm2 FROM TAB2
union all
SELECT distinct colm3 FROM TAB3)a group by colm1
答案 2 :(得分:0)
另一种选择是创建一个函数。实施例
----Source
CREATE TABLE ONE ( Let VARCHAR(10) )
INSERT INTO ONE
VALUES ( 'A' ),
( 'B' ),
( 'C' ),
( 'D' )
GO
CREATE TABLE TWO ( LET VARCHAR(10) )
INSERT INTO TWO
VALUES ( 'B' ),
( 'D' ),
( 'E' ),
( 'F' )
GO
CREATE TABLE THREE ( Let VARCHAR(10) )
INSERT INTO THREE
VALUES ( 'A' ),
( 'B' ),
( 'E' ),
( 'G' )
GO
----Function
CREATE FUNCTION isCompare ( @let VARCHAR(10) )
RETURNS VARCHAR(10)
AS
BEGIN
IF ( EXISTS ( SELECT 1
FROM TWO
WHERE let = @let )
AND EXISTS ( SELECT 1
FROM THREE
WHERE let = @let )
)
BEGIN
RETURN 'YES'
END
RETURN 'NO'
END
GO
----Query
SELECT dbo.isCompare(let) RESULT
FROM ONE
GO
--- End Query
DROP TABLE ONE
DROP TABLE TWO
DROP TABLE THREE
DROP FUNCTION isCompare
GO
结果:
RESULT
----------
NO
YES
NO
NO
(4 row(s) affected)
答案 3 :(得分:0)
假设我们有三个表格如下:
DECLARE @t1 TABLE (id CHAR)
INSERT INTO @t1 VALUES('a'),('b'),('c'),('d')
DECLARE @t2 TABLE (id CHAR)
INSERT INTO @t2 VALUES('b'),('d'),('e'),('f')
DECLARE @t3 TABLE (id CHAR)
INSERT INTO @t3 VALUES('a'),('b'),('e'),('g')
我们可以简单地使用LEFT JOIN
来解决问题,如下所示:
SELECT
t1.id,
t2.id,
t3.id,
CASE WHEN t1.id IS NULL OR t2.id IS NULL OR t3.id IS NULL THEN 'NO'
ELSE 'Yes'
END AS Msg
FROM @t1 as t1
LEFT JOIN @t2 AS t2 ON t1.id=t2.id
LEFT JOIN @t3 AS t3 ON t2.id=t3.id