【问题标题】:Fetch data from two different tables in one query在一个查询中从两个不同的表中获取数据
【发布时间】:2014-06-10 11:30:03
【问题描述】:

在我的网络服务器上有一个包含以下两个表的数据库:

tbl_Friend                                    tbl_Colleague

| id | Name | First name | Place |            | id | Name | First name | Place | 
----------------------------------            ----------------------------------
|  1 | XXXX | XXXXXXXXXX |   1   |            |  1 | AAAA | AAAAAAAAAA |   1   |
|  2 | YYYY | YYYYYYYYYY |   2   |            |  2 | BBBB | BBBBBBBBBB |   3   |
|  3 | ZZZZ | ZZZZZZZZZZ |   1   |            |  3 | CCCC | CCCCCCCCCC |   4   |

现在我想从tbl_Friendtbl_Colleague 获取住在place 1 的所有人员。为此,我必须从两个表中获取数据,这是我的问题:如何仅在一个查询中从两个不同的表中获取数据?我的结果应该是这样的:

| id | Name | First name | Place |
----------------------------------
|  1 | XXXX | XXXXXXXXXX |   1   |
|  1 | AAAA | AAAAAAAAAA |   1   |
|  3 | ZZZZ | ZZZZZZZZZZ |   1   |

我可以使用FROM tbl_Friend | tbl_Colleague 之类的东西吗?还是我必须为此使用 Join?

【问题讨论】:

  • 试试 UNION 或 UNION ALL 语句

标签: mysql sql qsqlquery


【解决方案1】:

试试这个:

select * from tbl_friend a, tbl_colleague b where a.place = b.place and place like '1';

【讨论】:

  • 更正:select * from tbl_friend a, tbl_colleague b where a.place = b.place and a.place like '1';
【解决方案2】:

试试这个:

SELECT id, Name, First name, Place FROM tbl_Friend
  WHERE Place= 1
UNION ALL
SELECT id, Name, First name, Place FROM tbl_Colleague
  WHERE Place= 1

【讨论】:

  • 谢谢你的作品很棒。这正是我想要的。
  • +1。 UNION ALL 集合运算符将返回 all 匹配的行,并且不需要识别和删除重复项的额外步骤。这将返回由 OP 指定的结果集,尽管我们注意到行的顺序不同。如果他想要行的特定序列,OP 可以添加一个ORDER BY 子句。 (OP 没有问这个问题,但在这样的查询中,我通常会包含一个额外的短鉴别器列:每个查询的 SELECT 列表中的一个文字,我可以使用它来识别哪个查询返回了该行。SELECT 'f' AS src, ... UNION ALL SELECT 'c', ...跨度>
  • @Cilenco,请注意,您的架构未标准化。
  • 是的,我知道。这只是我整张桌子的一部分,以便在这里更容易。
猜你喜欢
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
相关资源
最近更新 更多