是否可以在两个没有相互连接的表上写单个查询?

时间:2012-02-21 15:32:05

标签: sql sql-server sql-server-2008 sql-server-2005 tsql

我有两个表,我想知道是否可以在这两个表上写一个查询但它们没有相互连接?

一些示例代码段对我的理解非常有帮助。

表:Payment

Payment_id  Payment_status  amount
1  1001          201            400
2  1002          403            450
3  1003          204            460

运行查询后:SELECT Payment_status FROM Payment GROUP BY Payment_staus

它给我的结果如下:

Payment_staus
1 201
2 403
3 204

我还有一个名为status_code的表格为

  code    description
1 201     In progress
2 403     Complete
3 204      On Hold

在上面的查询中我想要Payment_staus及其各自的描述,结果应该如下所示

   Payment_status  description 
1    201            In progress
2    403            Complete
3    204            On Hold

3 个答案:

答案 0 :(得分:1)

SELECT p.payment_id, p.Payment_status, s.description
FROM Payment p
JOIN status_code s
ON p.Payment_status = s.code

这使用SQL“join”来连接status_code表的代码属性上的两个表。

这将为您提供类似

的结果
Payment_id   Payment_status   description
1001         201              In progress
1002         403              Complete
1003         204              On Hold

答案 1 :(得分:1)

笛卡尔联接(注意没有JOIN条件)。记录的所有可能组合都在结果中:

tableA (charfield Char(2))
tableB (numberfield Number(1))

INSERT 'A' INTO tableA;
INSERT 'B' INTO tableA;
INSERT 1 INTO tableB;
INSERT 2 INTO tableB;

SELECT * 
FROM   tablea CROSS JOIN tableb

结果:

charfield|numberfield
=====================
A        |1
A        |2
B        |1
B        |2    

答案 2 :(得分:0)

您可以使用UNION查询,但两个子查询中的字段类型/列数必须匹配:

SELECT a, b, c
FROM table1

UNION

SELECT p, q, r
FROM table2

替代方法是简单地进行完整的笛卡尔连接,如果两个表有大量行,则可以返回巨大的结果集 - 您将获得n x m