SQL查询两个来源

时间:2017-12-05 14:32:13

标签: sql

我的视图和表格如下所示

表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.CountryTable1.City匹配。我的困惑是如何做到这一点,因为我不是一个sql人,而是更多的C#等。

我想要创建的结果数据如下。我不知道我是否可以单独从View1执行此操作或使用哪些功能。

结果

+---------+---------+-------+---------------+
| Column1 | Column2 | Site  | ExistInTable1 |
+---------+---------+-------+---------------+
| Test    | Test2   | UKLDN | Y             |
| Test    | Test2   | USNEY | Y             |
| Test    | Test2   | USLAX | Y             |
| Test    | Test2   | PELMA | N             |
+---------+---------+-------+---------------+

由于

3 个答案:

答案 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版本,格式应该非常相似。

SQL Fiddle

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 |