【问题标题】:Which join or query method would be possible? MYSQL Quick Question?哪种连接或查询方法是可能的? MYSQL 快速问题?
【发布时间】:2011-08-01 15:22:42
【问题描述】:

非常快速的问题!

如果表 FK 有一个空值,我有什么方法可以设计我的查询,这样它就不会麻烦加入与外键关联的表。我目前正在使用左连接。

我可以使用另一个连接吗?或者我可以在我的查询中使用 PHP 执行类似的操作吗?

if (table foreign key == NULL) 
{   
do not join table that foreign key points to 
}

else 
{   
join table using foreign key value 
}

谢谢

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

    你能发布你的表和键名吗?然后我们可以编写查询 - 我认为它需要是一个内部连接以避免空值。

    select * from table1
    inner join table2
    on table1.pk = table2.fk
    where {your conditions}
    

    为您的架构

    select * from procedure
    inner join dosage on dosage.dosage_id = procedure.dosage_id
    

    为什么不用 CASE 语句来处理你的 NULL 并推送一个空字符串呢?

    SELECT *, CASE dosage_id
    WHEN (dosage_id IS NULL) THEN ''
    END
    from procedure
    inner join dosage on dosage.dosage_id = procedure.dosage_id
    

    (注意:我在 CASE 方面不是最好的 - ;) 希望这能让你足够接近)

    【讨论】:

    • 我可以在这里做得更好的是我的架构i.imgur.com/Dju0G.png 带有外键的表是“程序”,而我想要选择加入或不加入的表是“剂量”
    • 好的,谢谢,但现在这个查询不返回记录,我希望它仍然返回记录,但有或没有剂量行
    • 我认为你失去了我们:) - 你可以做一个左外,但你将有一个空值来处理。为什么这会给您带来问题?
    • 基本上我现在拥有的方法包含我的剂量表中的值,即使它们是 NULL,我希望 mySQL 中有一种方法可以忽略剂量是我的数据库,因此当我的数据显示在我的网页中时,我不会得到我不关心的空值:)
    【解决方案2】:

    我认为你可以设置 foreign:key 不为空的子句(希望我理解正确):

    SELECT * 
    FROM
    procedure
    LEFT JOIN dosage ON dosage.dosage_id= procedure.dosage_id
    WHERE 
    dosage.dosage_id is not null
    

    但我认为这相当于使用内部连接

    SELECT * 
    FROM
    procedure
    INNER JOIN dosage ON dosage.dosage_id = procedure.dosage_id
    

    【讨论】:

    • 谢谢,“procedure”是列名为“dosage_id”的表,该表是我要加入的“dosage”。
    • 谢谢,但现在如果“dosage_id”为空,查询不会返回记录,所以我无法从我的表中获取任何其他数据
    • 是的,我尝试了 inner join ,也许我无法控制我收到的数据我想我可以在结果中忽略它而不在我的页面上显示它。感谢您的努力
    【解决方案3】:

    AFAIK 我认为没有特定的连接可以精确地得到你想要的,所以你必须使用像伪代码中的条件来获得这种特定的行为。

    但是,在这种情况下,左连接就可以了:您不必编写两个单独的查询,如果 FK 为空,您只需处理一堆 NULL 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2011-12-15
      • 2013-03-27
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多