【问题标题】:How to apply INNER JOIN ON certain condition如何在特定条件下应用 INNER JOIN
【发布时间】:2016-04-26 15:12:12
【问题描述】:

这是我的表存储数据的方式:

看到我想从各个表中为 id 选择文本(名称)以用于显示目的。

*忽略分类的拼写错误
在这里,我加入了角色名称(列)的角色表、名称(列)的分类表和名称(列)的对象表。

在我的上表中,classi_id 和 object_id 都显示为“0”。所以使用我的内部连接语句它只返回两行没有'0'值。

我想在我的查询中放置一个条件,它只在分类和对象表上对那些没有“0”值的行进行内部联接,但我希望返回所有 5 行具有各自的角色.role_name、分类.name和 object.name。

请在下面查看我的查询:

*我正在为此查询使用数据库包装器

$data = $this->db->select("SELECT * FROM role_linkto INNER JOIN roles ON role_linkto.role_id = roles.role_id INNER JOIN clasification ON role_linkto.classi_id = clasification.id INNER JOIN object ON role_linkto.object_id = object.id ");

return $data;

linkto_id 1
-role_name [超级管理员]
-classification.name[系统]

linkto_id [2]
-role_name [Agency_Admin]
-classification.name[机构]

linkto_id [3]
-role_name [合同管理员]
-classification.name[部门]
-object.name[合约]

linkto_id [4]
-role_name [合同所有者]
-object.name[合约]

linkto_id [5]
-role_name [供应商]
-classification.name[机构]
-object.name[合约]

【问题讨论】:

  • 我认为您可能正在寻找LEFT JOIN,因为您想保留所有 5 行并应用额外的条件。你能把你想要的结果也放在问题中吗?
  • @NorbertvanNobelen,在我的帖子中添加了预期结果

标签: mysql join


【解决方案1】:

在 2 个带 0 的表上使用条件左连接

"SELECT * FROM role_linkto INNER JOIN roles ON role_linkto.role_id = roles.role_id LEFT JOIN clasification ON role_linkto.classi_id = clasification.id AND clasification.id <> '0' LEFT JOIN object ON role_linkto.object_id = object.id AND object.id <>'0' "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 2021-01-15
    • 2014-05-25
    • 2013-08-05
    • 2013-07-20
    • 2016-01-15
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多