【问题标题】:Is it possible to write single query on two table which are not connected to each other?是否可以在两个不相互连接的表上编写单个查询?
【发布时间】:2012-03-11 22:09:19
【问题描述】:

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

一些示例代码 sn-p 对我的理解很有帮助。

表: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

【问题讨论】:

  • 它被称为join。如果您在阅读完连接后仍然遇到问题,请发布一些有关您的两个表的信息以及您所追求的信息,我们可以为您提供帮助。
  • @MrE - 但问题是这两个表没有连接。 @user1221355 请提供示例数据和期望的结果。
  • 叹息...这是标准的加入 OP。
  • @BD,很确定我们都看到了那个来了
  • 我认为在这种情况下“未连接”意味着没有外键但应该有。 :-\

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


【解决方案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    

【讨论】:

  • 如果您要在代码中编写交叉连接,我强烈建议您明确说明您的意图(使用 CROSS JOIN 运算符),以便您的同行知道这是故意的,并且你没有忘记 where 子句或逗号是错误的,而 tableb 本来是一个别名......无论如何,我非常怀疑交叉连接的结果是 OP 在这种情况下所追求的。
  • 添加了交叉连接。根据 OP 的最后评论,我认为您是对的。
【解决方案2】:
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 表的 code 属性上的两个表。

这会给你类似的结果

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

【讨论】:

  • OP特意说这两个表没有关系,所以没有什么可以加入的。
  • +1 根据 cmets 的当前状态,这可能是他们需要的。
【解决方案3】:

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

SELECT a, b, c
FROM table1

UNION

SELECT p, q, r
FROM table2

另一种方法是简单地进行完整的笛卡尔连接,如果两个表有大量行,它可以返回巨大的结果集 - 你会得到n x m

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多