我的视图和表格如下所示
表1
+---------+------+
| Country | City |
+---------+------+
| UK | LDN |
| US | NEY |
| US | LAX |
+---------+------+
视图1
+---------+---------+-------+
| Column1 | Column2 | Site |
+---------+---------+-------+
| Test | Test2 | UKLDN |
| Test | Test2 | USNEY |
| Test | Test2 | USLAX |
| Test | Test2 | PELMA |
+---------+---------+-------+
我想要实现的结果是显示来自 View1 的所有行,其中View1.Site
列与Table1.Country
和Table1.City
匹配。我的困惑是如何做到这一点,因为我不是一个sql人,而是更多的C#等。
我想要创建的结果数据如下。我不知道我是否可以单独从View1执行此操作或使用哪些功能。
结果
+---------+---------+-------+---------------+
| Column1 | Column2 | Site | ExistInTable1 |
+---------+---------+-------+---------------+
| Test | Test2 | UKLDN | Y |
| Test | Test2 | USNEY | Y |
| Test | Test2 | USLAX | Y |
| Test | Test2 | PELMA | N |
+---------+---------+-------+---------------+
由于
答案 0 :(得分:1)
你可以试试这个。
SELECT V.*, CASE WHEN T.Country IS NULL THEN 'N' ELSE 'Y' END ExistInTable1 FROM View1 V
LEFT JOIN Table1 T ON V.Site = (T.Country + T.City)
答案 1 :(得分:0)
您需要对您的表格执行LEFT JOIN
,然后检查它是否与视图中的信息匹配,如下所示:
SELECT
VW.Column1
,VW.Column2
,VW.Site
,CASE WHEN ISNULL(T.country, T.city) IS NULL THEN 'N' ELSE 'Y' END AS ExistInTable1
FROM View1 VW
LEFT JOIN Table1 T
ON VW.site = CONCAT(T.country, T.City)
LEFT JOIN
关键字返回左表(View1
)中的所有记录,以及右表(Table1
)中匹配的记录。如果没有匹配,则结果是右侧的NULL
。(使用CASE
语句检查)
你也可以测试Here。
答案 2 :(得分:0)
这是T-SQL,但对于大多数其他SQL版本,格式应该非常相似。
MS SQL Server 2014架构设置:
CREATE TABLE Table1 (Country varchar(5),City varchar(5)) ;
INSERT INTO Table1 (Country,City)
VALUES ( 'UK','LDN'),('US','NEY'),('US','LAX')
;
CREATE TABLE View1 (Column1 varchar(10), Column2 varchar(10), Site varchar(10)) ;
INSERT INTO View1 (Column1,Column2,Site)
VALUES ('Test','Test2','UKLDN')
, ('Test','Test2','USNEY')
, ('Test','Test2','USLAX')
, ('Test','Test2','PELMA')
;
查询1 :
SELECT v.Column1, v.Column2
, CASE WHEN LEN(COALESCE(t.Country,t.City)) > 0 THEN 'Y' ELSE 'N' END AS ExistsInTable1
FROM View1 v
LEFT OUTER JOIN Table1 t ON v.Site = (t.Country+t.City)
<强> Results 强>:
| Column1 | Column2 | ExistsInTable1 |
|---------|---------|----------------|
| Test | Test2 | Y |
| Test | Test2 | Y |
| Test | Test2 | Y |
| Test | Test2 | N |