0

再会。

我有两个 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

4 回答 4

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
于 2013-05-19T23:42:43.617 回答
1

只需UNION在两个查询之间使用运算符。根据这个类似问题的回答:

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

Select * from a UNION Select * from b Note:

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

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

于 2013-05-19T23:58:25.797 回答
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 无论如何都会删除重复项。

顺便说一句,WHERE 子句中使用的所有这些字段真的是字符串吗?如果没有,您需要酌情删除单引号。您使用仅包含数字的字符串文字有点可疑。

于 2013-05-20T00:14:00.850 回答
0

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

SELECT name FROM 
TableOne, TableTwo
WHERE city='3452' AND firm='49581' AND service='2'
Group by name
于 2013-05-20T00:22:27.620 回答