【问题标题】:Joining multiple unrelated tables in MySQL在 MySQL 中连接多个不相关的表
【发布时间】:2010-02-04 05:13:19
【问题描述】:

我有一个网站,将<select> 选项存储在多个表格中,并根据各个页面提取所有相关选项。目前,我得到一个这样的查询:SELECT foo FROM foo_tbl;SELECT bar FROM bar_tbl;etc。这不是一个真正糟糕的问题,但我必须单独迭代每个选择结果。

我想将它们全部提取到一个网格中,然后执行类似的操作

if $row['foo'] != NULL { add to the foo options }
if $row['bar'] != NULL { add to the bar options }
etc

如果我使用像 SELECT DISTINCT f.foo, b.bar FROM foo_tbl AS f, bar_tbl AS b 这样的查询,我会得到所有可能的行组合(第一个 foo 第一条,第一个 foo 第二条,第二个 foo 第一条,第二个 foo 第二条,等等)。

有没有办法进行这样的选择,并且在一列中每个元素只有一次实例,并用空值填充该列中的其余行?

【问题讨论】:

  • 您提出的解决方案很糟糕,尤其是在每种类型有不同数量的选项时。您应该运行多个查询,或者返回 UNIONed 结果,列是 [Type, Value]

标签: sql mysql


【解决方案1】:

您可以执行以下操作: 假设表 foo 有 a、b、c 列,而表 bar 有 d、e、f 列

Select 'isFOO', a, b, c, null, null, null from foo
Union All
Select 'isBAR',null, null, null, d, e, f from bar

【讨论】:

  • NICE ...现在如果第一个参数显示数据来自哪个表,那么将回答monkeysp的请求!我已将其添加到您的答案中,如果您不喜欢,请随时回滚!
  • 这太完美了!非常感谢,你们俩。
【解决方案2】:

您是否考虑过使用联合

select foo as "f1" from footable where ..whatever..
union
select bar as "f1" from bartable where ..whatever..

这会给你一个结果集..但是如果表格真的没有任何关联..这仍然对你没有多大帮助..

【讨论】:

  • 5.5 年后仍然有帮助。谢谢。
【解决方案3】:

或者像这样:

(从那里选择 a、b、c、'1' 作为数字......) 联盟 (从那里选择a,null,null,'2'作为数字......) 联盟 (从那里选择a,b,null,'3'作为数字......) 按编号排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多