TSQL:将选择添加到左侧外部联接

TSQL:将选择添加到左侧外部联接,tsql,join,left-join,Tsql,Join,Left Join,抱歉,如果问题太简单,我正在自学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 FR

抱歉,如果问题太简单,我正在自学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
所以我可以得到这个结果:

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

我怎样才能做到


非常感谢

您可以按如下方式进行:

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

只需在一条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 

(对不起,伙计们,我没有时间检查,谢谢你们的评论。代码已经修改了。)

没有问题太简单了!我是一位SQL专家,忙着问一些非常基本的Java脚本问题。你也可以直接问,而不是沮丧地试图弄清楚你在网上能找到什么,只要你努力,那么每个人都是快乐的

你所要求的事实上根本不是基本的,可以用很多方式来解释。几个不同的SQL将给出几个不同的结果

首先,这部分:

WHERE table1.name NOT LIKE 'test'
使用LIKE而不使用通配符(%,)是不常见的。如果要排除完全是“测试”的记录,请不要使用like,而是使用以下命令:

WHERE table1.name <> 'test'
这当然是遗漏了这一点:

AND table2.city = city
在这种情况下,您是要将列city与文本字符串“city”匹配,还是要将其与列city匹配?如果是,该列在表1还是表2中

有一些稍微不同的方法来处理您的问题,这反过来意味着编写不同的SQL,这反过来会给您不同的答案

因此,请想一想:

  • 表2中是否总是有与表1相匹配的记录?如果是这样,您可以使用内部联接而不是外部联接,这样可以避免一些复杂的情况
  • 你应该画一张表格的图表,用线条显示它们是如何连接的
  • 此外,如果您为表提供了一个不太通用的名称,那么它可以帮助我们直观地了解您正在尝试做什么

    AND table2.city = city