【问题标题】:mysql select multiple tables - return results eventhough the other tables is emptymysql选择多个表-即使其他表为空也返回结果
【发布时间】:2014-02-06 10:41:52
【问题描述】:
select * from deliveries, remittance

“deliveries”表有 10 条记录,而“remittance”表没有。此查询不返回任何结果。我想要的是mysql从表'deliveries'中返回10条记录。请帮帮我。

这是一个示例表

交货-> trans_number 从 到

汇款-> trans_number 从 到

【问题讨论】:

  • 当您只需要一张表的结果时,为什么要从两张表中选择?只需从交货中选择。
  • 你试过这样的吗? select d.* , r.* from Deliveries d, remittance r
  • @Laurik table remittance 也有数据,但有时没有数据。所以我必须同时选择它们来显示它们的数据
  • 可以显示表格方案吗???
  • 我认为@AlexCoroza 正在寻找FULL OUTER JOIN

标签: mysql join full-outer-join


【解决方案1】:

您可能需要使用LEFT JOIN:

select deliveries.* 
from deliveries
left join remittance on ... -- put a join condition here.

这将返回 deliveries 表中的所有记录,即使在另一个表中没有找到匹配的行。

如果您使用INNER JOIN,它将不会返回任何行,因为另一个表是空的。但它只会为您提供 deliveries 中与条件匹配的行。

【讨论】:

  • 先生,如果表'remittance'有记录而'deliveries'没有记录怎么办。使用上述查询将不会返回任何结果。
  • @AlexCoroza - 是的,它不会返回任何行,如果您想返回在remittance 中找到的行,在这种情况下使用RIGHT JOIN 而不是select remittance.* from deliveries right join remittance on ... 或切换两者的顺序表:select remittance.* from remittance left join deliveries on ...
  • @AlexCoroza - 有关连接类型之间差异的更多信息,请参阅这篇文章:codinghorror.com/blog/2007/10/…
【解决方案2】:

试试类似的东西

select * from deliveries
left join remittance
on remittance.id = deliveries.remittance_id

它将带来来自deliveries的所有数据和来自remittance的匹配数据

更新:

如果您想在任何情况下显示记录,如果任何表有记录,那么您正在寻找FULL OUTER JOIN

但由于 不支持FULL OUTER JOIN,请尝试此查询

SELECT * FROM deliveries
LEFT JOIN remittance ON remittance.id = deliveries.remittance_id
UNION
SELECT * FROM deliveries
RIGHT JOIN remittance ON remittance.id = deliveries.remittance_id

【讨论】:

  • 先生,我试过你的答案,它奏效了。但是如果“deliveries”表没有记录,而“remittance”表有记录呢?
  • 我是从您之前提供的链接中看到的。这个查询模拟完全外连接,对吧?非常感谢您的回答。
  • 先生,我还有一个问题。真的,我有 3 张桌子可供选择。是否可以在 1 个查询中选择它们?使用您的解决方案。
  • 也看看这个和它的例子stackoverflow.com/a/17663157/829533
【解决方案3】:

试试这个

     select d.* , r.* from deliveries d , remittance r

【讨论】:

    【解决方案4】:

    您需要提供一些标准,以便mysql 可以显示表格的结果..如 加入

    【讨论】:

      【解决方案5】:
      SELECT * FROM deliveries 
      LEFT JOIN remittance 
      ON remittance.id = deliveries.remittance_id
      

      【讨论】:

        【解决方案6】:

        试试这个

        select d.* from deliveries d left join remittance r
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多