3表SQL JOIN不返回数据

时间:2016-10-01 13:53:37

标签: sql join

以下查询不会返回任何数据。无法弄清楚为什么。删除其中一个连接有效,但我无法从一个表中获取数据。

$productInfo = "SELECT stock.*, s_list.*, c_list.*
                FROM  stock
                INNER JOIN s_list
                ON stock.s_compo_id = s_list.id
                INNER JOIN c_list
                ON stock.c_compo_id = c_list.id
                WHERE batch_id = '$productID'";

2 个答案:

答案 0 :(得分:0)

这是您的查询:

SELECT stock.*, s_list.*, c_list.*
FROM stock INNER JOIN
     s_list
     ON stock.s_compo_id = s_list.id INNER JOIN
     c_list
     ON stock.c_compo_id = c_list.id
WHERE batch_id = '$productID'";

以下是一些我很容易想到你没有数据的原因:

  • batch_id$productID不匹配。名字不同,为什么我认为它们指的是同一个东西呢?
  • s_listc_list(或两者)都没有匹配的记录。您正在进行内部联接,因此没有匹配的记录意味着不会返回任何行。
  • 您正在获取行,但列在两个表中具有相同的名称。例如,您可能会在输出中看到一个id列,并且不清楚它来自哪个表。 明确列出所需的列并为其指定唯一的别名。

并且,因为命名看起来不对,所以不太可能:

  • 一个或两个join的连接条件不正确,因此没有匹配。

并且,必须注意的是,您不应该将变量直接放入查询字符串中。使用参数。它不仅更安全,而且为引擎提供了缓存查询计划的机会,在多次调用时节省了工作量。

答案 1 :(得分:0)

尝试使用以下查询。

    $productInfo = "SELECT stock.*, s_list.*, c_list.*
            FROM  stock
               LEFT JOIN s_list
                 ON stock.s_compo_id = s_list.id
               LEFT JOIN c_list
                  ON stock.c_compo_id = c_list.id
            WHERE batch_id = '$productID'";