【问题标题】:MySQL: get table data but join another table if the id matachMySQL:获取表数据但如果 id 匹配则加入另一个表
【发布时间】:2013-09-23 23:09:40
【问题描述】:

我的桌子

pets
pet_lost

给我所有petswhere user_id = 1 ...但如果pet_lost.pet_id = pets.id也包括pet_lost数据

我一直想引入petswhere user_id = 1,但如果有连接我想访问pet_lost 数据...

有意义吗?

【问题讨论】:

  • "有意义吗?" 不完全是,不 - 尽管听起来您可能在进行外部连接:请参阅A Visual Explanation of SQL Joins
  • 那是LEFT JOIN...FROM pets LEFT JOIN pet_lost ON pets.id = pet_lost.pet_id
  • 我尝试了LEFT JOIN,但它似乎只在两个条件都成立的情况下给我结果......记住,无论如何我都想获得pet数据
  • 如果您尝试过某事,为什么不在您的问题中表明这一点?连同您的数据样本和您获得的结果以及您期望的结果,我们实际上可能能够提供帮助(而不是猜测)。

标签: mysql database laravel laravel-4


【解决方案1】:

您可以使用left outer join 和适当的where 子句将其转换为查询:

select *
from pets p left outer join
     pet_lost pl
     on pl.pet_id = p.id
where p.user_id = 1 or pl.pet_id is not null;

编辑:

你可以这样表述:

select p.*
from pets p
where p.user_id = 1 or
      p.id in (select pl.pet_id from pet_lost);

【讨论】:

    【解决方案2】:

    我不确定您为什么有 2 个表,但据我所知,我会在 pets 列中放置一个二进制字段,用于表示宠物状态的是或否。

    但是,如果您要保持表原样,那么您将使用“联合”查询将 2 个表放在一起。

    请记住,宠物表中不能丢失宠物 ID。

    我会推荐宠物表中的二进制字段并删除宠物丢失表。

    【讨论】:

    • 我明白你在说什么,但我需要存储与状态相关的数据......
    • 如果不在自己的表中,您会建议我将这些数据存储在哪里?
    • 如果我的回复迟到了,我很抱歉,我是新手,还在从事其他项目。如果您可以发布您的字段或列,我可以帮助您对其进行规范化。或者,如果您可以找到有关数据规范化的书籍或链接,它将帮助您更好地设计表格
    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 2021-12-11
    • 2015-10-27
    • 2021-10-31
    • 2020-03-09
    • 1970-01-01
    • 2021-03-25
    • 2022-01-22
    相关资源
    最近更新 更多