【问题标题】:How can I display data from two unrelated tables?如何显示两个不相关表中的数据?
【发布时间】:2016-11-17 16:53:57
【问题描述】:

我在 MYSQL 数据库中有两个不相关的表。我想从它们中选择并显示数据。

例如,表格如下所示:

我想在我的网站上显示结果,按字母顺序排列,如下所示:

每个表格中的 ID 用于指代猫或狗的照片。我对 JOIN 语句没有太多运气,在这种情况下 UNION 会起作用吗?

非常感谢任何帮助。

【问题讨论】:

  • 您需要join。编辑您的问题并添加您尝试过的join 语句。
  • @randominstanceOfLivingThing 这里没有任何相关的 JOIN。
  • @randominstanceOfLivingThing 如何加入不相关的表?
  • 旁注:您可能应该考虑重新建模您的数据。您有两个表存储基本相同的内容,Alpha 列看起来只是 Name 列中已有数据的重复。
  • @David 谢谢,我在真实表中有更多列,由于其他原因不适合改造

标签: mysql


【解决方案1】:
SELECT Alpha, Name, CONVERT(Cat_Id, CHAR(50)) AS Cat_Id, '' AS Dog_Id
FROM Cat
UNION ALL
SELECT Alpha, Name, '' AS Cat_Id, CONVERT(Dog_Id, CHAR(50)) AS Dog_Id
FROM Dog
ORDER BY Alpha

几个cmets:

严格来说,如果我们想为丢失的猫或狗 ID 显示空字符串,那么我们需要将 Cat_IdDog_Id 列转换为 CHAR,因为列中的所有值都需要相同输入。

不必包装UNION 查询以使用ORDER BY 并按Alpha 列排序,而是我们可以在末尾添加ORDER BY

【讨论】:

  • 这很好用。由于两个表中还有其他列,我使用了 UNION,而不是 UNION ALL。我不知道会投射这样的值,非常感谢。
  • @ovokuro 我相信在 MySQL 中你可以不使用演员表。但其他更严格的数据库,例如 SQL Server,可能不允许这样做,所以这是一个好习惯。
  • 正如 Tim Biegeleisen 所说,使用 cast 是一个好习惯。 @ovokuro,如果您使用 UNION ALL,您将允许 mysql 跳过两组的唯一性比较。联合删除重复的行。在这种情况下,从长远来看,当数据增加时,UNION All 将提高性能。
  • @AshokM.Prajapati - 感谢您的建议。
【解决方案2】:
SELECT Alpha,Name,Cat_ID,'' as Dog_ID
FROM Cat
UNION ALL
SELECT Alpha,Name,'' as Cat_ID,Dog_ID
FROM Dog

【讨论】:

    【解决方案3】:

    我会使用字段将两个表合并为一个表:

    ID   Type   Name   Alpha
    

    类型字段可以是 cat 或 dog,然后其余部分将按照您的要求填写。这还允许您在将来添加其他动物类型,而无需更改您的数据库。然后是显示数据时的简单选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2012-05-29
      • 2015-06-11
      相关资源
      最近更新 更多