【问题标题】:Join all rows from two different tables MySQL连接来自两个不同表 MySQL 的所有行
【发布时间】:2013-01-22 01:14:08
【问题描述】:

我一直在尝试连接两个不同表中的所有行。我试过 UNION 和 LEFT JOIN。

现在我刚刚使用了两个单独的查询,并且一个接一个地显示。我想合并两个查询以同时显示。

表 1 称为“批准”,表 2 称为“cmets”。

批准
- 身份证
- postID
- postUserID
- 用户ID

cmets
- 身份证
- postID
- postUserID
- 用户 ID
- 评论
- 日期

【问题讨论】:

  • 你能发布表格结构吗?如果没有任何细节,很难弄清楚这些表将加入什么
  • @IanQuinn 编辑您的原始问题并将表格结构发布在那里,不要将其放在 cmets 中

标签: mysql join union


【解决方案1】:

这里是一个 UNION 的例子

select id, postID, postUserID, userID, comment, date from comments
union
select id, postID, postUserID, userID, null, null from approves 

【讨论】:

  • 好的,一旦我有了这个,如果我在获取行的 WHILE 循环中有这个查询,有什么方法可以确定当前记录来自哪个表?
  • 是的 - 添加另一个任意列,第一列硬编码 1,第二列硬编码 2.. 你可以用它来判断。
【解决方案2】:

你能插入你正在使用的 SQL 吗?联合将合并两个表,连接将依次从表中获取所有行并合并所有关联的行。 JOIN 默认为内连接。 UNION 实际上将合并来自两个表的结果。如果你想要 a 中的所有行,以及表 b 中的相应 cmets,则使用左连接。

【讨论】:

    【解决方案3】:

    根据您的表格,您似乎可以JOIN 表格:

    select *
    from approves a
    inner join comments c
        on a.userid = c.userid
        and a.postid = c.postid
    

    我猜您将需要基于postiduserid 在多个列上加入表。

    我使用了INNER JOIN,它将返回两个表之间的所有匹配行。如果您只想返回approves 表中的那些记录,那么您可以使用LEFT JOIN。如果您在学习连接语法方面需要帮助,这里有一个很棒的visual explanation of joins

    您可以使用UNION,但必须为每个表选择所需的列,因为UNION 的每个查询中的列数必须相等。所以UNION 将是:

    select id, postid, postUserId, userId, null as comment, null as date, 'approves' as Src
    from approves 
    union all
    select id, postid, postUserId, userId, comment, date, 'comments' as src
    from comments 
    

    请注意,我添加了一个名为 src 的附加列,可用于确定数据来自哪个表。

    【讨论】:

    • 试过这个,当我使用 mysql_fetch_assoc mysql_query("SELECT * FROM 批准一个 INNER JOIN cmets c ON a.userID = c.userID AND a.postID = c.postID WHERE postUserID = '$userID' && userID != '$userID' ORDER BY id DESC LIMIT 0,10");
    • @IanQuinn 我不确定是什么错误,但我还包含了一个UNION 版本来返回数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2012-12-09
    • 2016-05-15
    • 2014-10-05
    相关资源
    最近更新 更多