【问题标题】:TSQL: adding a select to a left outer joinTSQL:向左外连接添加选择
【发布时间】:2012-10-31 18:52:06
【问题描述】:

对不起,如果问题太基础,我正在自学 TSQL,我不知道以下是如何完成的:

我有这个问题:

SELECT table1.name, table2.city AS city, table2.province
FROM table1 LEFT OUTER JOIN table2
ON table1.id = table2.id
WHERE table1.name NOT LIKE 'test'
ORDER BY city DESC 

我想添加另一个:

SELECT table3.country 
FROM table3 LEFT JOIN table2 
ON table3.id = table2.id
WHERE table2.city = city

所以我可以得到这个结果:

名称 -- 城市 -- 省 -- 国家

我该怎么做?

非常感谢!

【问题讨论】:

    标签: tsql join left-join


    【解决方案1】:

    你可以这样做:

    SELECT 
        table1.name, 
        table2.city AS city, 
        table2.province,
        table3.country
    FROM 
        table1 
        LEFT OUTER JOIN table2
        ON table1.id = table2.id
        RIGHT JOIN table3
        ON table2.id = table3.id
    WHERE 
        table1.name NOT LIKE 'test'
    ORDER BY city DESC
    

    【讨论】:

      【解决方案2】:

      没有什么问题太基础了!我是一名 SQL 专家,忙于询问非常基本的 Java Script 问题。您不妨直接询问,而不要因为试图弄清您在网络上找到的东西而感到沮丧,而且只要您努力,那么每个人都会很高兴。

      您所要求的实际上根本不是基本的,可以通过多种方式进行解释。几个不同的 SQL 会给你一些不同的结果。

      首先,这部分:

      WHERE table1.name NOT LIKE 'test'
      

      不使用通配符(%、_)的 LIKE 是不常见的。如果您想排除完全是“测试”的记录,请不要使用 like,而是使用它:

      WHERE table1.name <> 'test'
      

      表示“不同于”

      关于外连接下一个表,首先,你确定要外连接吗?

      您可能会关注此代码,尽管这并不是您所要求的:

      SELECT table1.name, table2.city AS city, table2.province
      FROM table1 LEFT OUTER JOIN table2
      ON table1.id = table2.id
      LEFT OUTER JOIN table3
      ON table1.id = table3.id
      WHERE table1.name NOT LIKE 'test'
      ORDER BY city DESC 
      

      这当然少了这一点:

      AND table2.city = city
      

      在这种情况下,您是想将城市列与文字字符串“城市”匹配,还是尝试与城市列匹配?如果是,是table1还是table2中的列

      解释您的问题的方式略有不同,这反过来意味着编写不同的 SQL,从而为您提供不同的答案。

      所以想一想:

      1. table2 中是否始终存在与 table1 匹配的记录?如果是这样,您可以使用 INNER JOIN 而不是 OUTER JOIN 并节省一些复杂性
      2. 您应该绘制一张表格图表,用线条显示它们是如何连接的。

      此外,如果您为表提供一个不太通用的名称,它可以帮助我们直观地了解您正在尝试做什么。

      【讨论】:

        【解决方案3】:

        只需在一个 SQL 语句中使用两个连接:

        SELECT table1.name, table2.city AS city, table2.province, table3.country
        FROM table1
        LEFT OUTER JOIN table2 ON table1.id = table2.id
        LEFT OUTER JOIN table3 ON table3.id = table2.countryid
        WHERE table1.name NOT LIKE 'test' and table2.city = 'Cityname'
        ORDER BY city DESC 
        

        (抱歉各位,没来得及检查,感谢评论。代码已修改。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-01
          • 2010-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多