从两个表中选择数据而不是将它们连接起来,让它们显示为单独的行的最简单方法是什么。两个表都有相似或匹配的字段,我想对它们运行一些聚合函数,例如从两个表中对同一个月发生的所有行进行平均。
例如,我有两个表,一个显示来自一个系统的事务,另一个显示来自不同系统的事务。有没有办法从两个表中获取所有事务作为单独的行?如果表 1 有 20 条记录,而表 2 有 30 条记录,我希望返回时有 50 行。
从两个表中选择数据而不是将它们连接起来,让它们显示为单独的行的最简单方法是什么。两个表都有相似或匹配的字段,我想对它们运行一些聚合函数,例如从两个表中对同一个月发生的所有行进行平均。
例如,我有两个表,一个显示来自一个系统的事务,另一个显示来自不同系统的事务。有没有办法从两个表中获取所有事务作为单独的行?如果表 1 有 20 条记录,而表 2 有 30 条记录,我希望返回时有 50 行。
你可以尝试这样的事情:
SELECT ...
FROM (
SELECT f1,f2,f3 FROM table1
UNION
SELECT f1,f2,f3 FROM table2
)
WHERE ...
UNION ALL
运算符可能是您正在寻找的。
使用此运算符,您可以将多个查询的结果集连接在一起,保留每个查询的所有行。请注意,UNION
运算符(没有ALL
关键字)将消除结果集中存在的任何“重复”行。该UNION ALL
运算符保留每个查询中的所有行(并且可能会执行得更好,因为它没有执行重复检查和删除操作的开销)。
在每个查询中,每列的列数和数据类型必须匹配。如果其中一个查询的列比另一个多,我们有时会在另一个查询中包含虚拟表达式以使列和数据类型“匹配”。通常,在返回文字的每个查询的 SELECT 列表中包含一个表达式(一个额外的列)会很有帮助,以显示哪些查询是该行的“源”。
SELECT 'q1' AS source, a, b, c, d FROM t1 WHERE ...
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2 JOIN t3 ON ...
UNION ALL
SELECT 'q3', '1', '2', buckle, my_shoe FROM t4
您可以将这样的查询包装在一组括号中,并将其用作内联视图(或 MySQL 术语中的“派生表”),以便您可以对所有行执行聚合操作。
SELECT t.a
, SUM(t.b)
, AVG(t.c)
FROM (
SELECT 'q1' AS source, a, b, c, d FROM t1
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2
) t
GROUP BY t.a
ORDER BY t.a
你可以试试这个符号:
SELECT * from table1,table2
更复杂的一个:
SELECT table1.field1,table1.field2, table2.field3,table2.field8 from table1,table2 where table1.field2 = something and table2.field3 = somethingelse
如果您的问题是这样的 - 选择 ename, dname FROM emp, dept 而不使用连接..
然后,我会这样做...
SELECT ename, (SELECT dname
FROM dept
WHERE dept.deptno=emp.deptno)dname
FROM EMP
输出:
ENAME DNAME
---------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
ENAME DNAME
---------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
14 rows selected.
你应该试试这个
SELECT t1.*,t2.* FROM t1,t2
SELECT * from table1 UNION SELECT * FROM table2
联合将按行而不是按列获取数据,因此,如果您像我一样正在寻找从两个没有关系且没有连接的不同表中获取列数据。
就我而言,我通过 id 获取州名和国家名。您可以这样做,而不是编写两个查询。
select
(
select s.state_name from state s where s.state_id=3
) statename,
(
select c.description from country c where c.id=5
) countryname
from dual;
其中 dual 是一个带有单列的虚拟表——任何东西都只需要 table 来查看
select 'test', (select name from employee where id=1) as name, (select name from address where id=2) as address ;
在这种情况下,我们假设我们有两个表:
SMPPMsgLog
和SMSService
common 列serviceid
:
SELECT sp.SMS,ss.CMD
FROM vas.SMPPMsgLog AS sp,vas.SMSService AS ss
WHERE sp.serviceid=5431
AND ss.ServiceID = 5431
AND Receiver ="232700000"
AND date(TimeStamp) <='2013-08-07'
AND date(TimeStamp) >='2013-08-06' \G;