如何结合两个查询sql?

时间:2013-05-19 23:40:57

标签: sql sql-server-2008

美好的一天。

我有两个SQL查询:

首先

SELECT name FROM 
TableOne
WHERE city='3452' AND firm='49581' AND service='2'
Group by name

第二

SELECT name FROM 
TableTwo
WHERE city='3452' AND firm='49581' AND service='2'
Group by name

请告诉我如何组合两个查询sql并从两个表中选择所有名称(按名称分组)?

4 个答案:

答案 0 :(得分:1)

您可以使用UNION ALL http://sqltutorials.blogspot.com/2007/06/sql-union-all.html

SELECT name
FROM (
    SELECT name 
    FROM TableOne
    WHERE city='3452' AND firm='49581' AND service='2'
    UNION ALL
    SELECT name 
    FROM TableTwo
    WHERE city='3452' AND firm='49581' AND service='2' ) x
GROUP BY name

答案 1 :(得分:1)

在两个查询之间使用UNION运算符。根据{{​​3}}中的回答:

  

您可能正在查询在查询中使用UNION:

Select * from a UNION Select * from b Note:
  

这是更好的做法   限定列名而不是使用*引用。这个会   如果您的两个表经历了模式,也会使查询仍然有用   更改,但您仍然想要拉回两个表的所有数据   有共同点。

Union将排除相同的对象。为避免这种情况,您可以改为使用UNION ALL

答案 2 :(得分:1)

嗯,“结合”可能意味着很多事情,但我猜你想要这样的东西:

SELECT name
FROM (
    SELECT name, city, firm, service FROM TableOne
    UNION ALL
    SELECT name, city, firm, service FROM TableTwo
) Q
WHERE city='3452' AND firm='49581' AND service='2'
GROUP BY name

没有必要使用UNION(没有ALL),因为GROUP BY无论如何都会删除重复项。

BTW,WHERE子句中使用的所有字段都是真正的字符串吗?如果没有,您需要根据需要删除单引号。您使用仅包含数字的字符串文字有点可疑。

答案 3 :(得分:0)

我相信这种语法更简单,因此更容易维护。第二行中的逗号进行连接。

SELECT name FROM 
TableOne, TableTwo
WHERE city='3452' AND firm='49581' AND service='2'
Group by name
相关问题