【问题标题】:How to use INNER JOIN?如何使用 INNER JOIN?
【发布时间】:2015-07-22 12:03:59
【问题描述】:

我是 PHP 新手。我有一个 sql 查询。我使用内部连接。我面临一些问题。如果有任何一个空白字段为空,则不显示其他字段的任何数据。

这是我的查询

$sql= "SELECT r.client_id,c.id,t.id,a.id,o.id,c.name as cname,t.title as ttitle,a.title as atitle,o.title as otitle, l.title as ltitle
FROM og_ratings r 
INNER JOIN og_companies c
ON r.client_id = c.id
INNER JOIN og_rating_types t
ON r.rating_type_id = t.id
INNER JOIN og_actions a
ON r.pacra_action = a.id
INNER JOIN og_outlooks o
ON r.pacra_outlook = o.id
INNER JOIN og_lterms l
ON r.pacra_lterm = l.id
INNER JOIN og_sterms s
ON r.pacra_sterm = s.id
WHERE c.id= '$id2'
ORDER BY r.id DESC
LIMIT 1 ";

【问题讨论】:

  • 将所有inner join 替换为left join 并将og_companies 放在列表的首位,这样您就可以保留所有公司。
  • 当然.. 内连接只会在每个表上获取具有相似列值的数据。在您的情况下使用左连接或右连接

标签: php mysql join inner-join


【解决方案1】:

因此,您拥有LEFT JOIN(或在某些特殊情况下为RIGHT JOIN)。 LEFT JOIN 仅从指定的第一个表中选择所有字段,并使用 NULL 填充其他表中的字段 - 没有找到条目。

只需将所有INNER JOIN 替换为LEFT JOIN

【讨论】:

    【解决方案2】:

    INNER JOIN 替换为LEFT JOIN

    $sql= "SELECT r.client_id,c.id,t.id,a.id,o.id,c.name as cname,t.title as ttitle,a.title as atitle,o.title as otitle, l.title as ltitle
    FROM og_ratings r 
    LEFT JOIN og_companies c
    ON r.client_id = c.id
    LEFT JOIN og_rating_types t
    ON r.rating_type_id = t.id
    LEFT JOIN og_actions a
    ON r.pacra_action = a.id
    LEFT JOIN og_outlooks o
    ON r.pacra_outlook = o.id
    LEFT JOIN og_lterms l
    ON r.pacra_lterm = l.id
    LEFT JOIN og_sterms s
    ON r.pacra_sterm = s.id
    WHERE c.id= '$id2'
    ORDER BY r.id DESC
    LIMIT 1 ";
    

    【讨论】:

      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多