3 Таблица 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 ответа

  1. Это ваш запрос:

    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_listили c_list(или оба) не имеют совпадающих записей. Вы выполняете внутренние соединения, поэтому никакие совпадающие записи не будут означать, что строки не возвращаются.
    • Вы получаете строки, но столбцы имеют одинаковые имена в двух таблицах. Например, вы, скорее всего, увидите один idстолбец в выходных данных, и не ясно, из какой таблицы он происходит. Явным образом перечислите нужные столбцы и дайте им уникальные псевдонимы.

    И, менее вероятно, потому что имя выглядит правильно:

    • Условия соединения для одного или обоих joins неверны, поэтому ничто не совпадает.

    И обязательно обратите внимание, что переменные не должны помещаться непосредственно в строки запроса. Использовать параметры. Это не только безопаснее, но и дает движку возможность кэшировать план запроса, экономя усилия при многократном вызове.

  2. Попробуйте выполнить следующий запрос.

        $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'";