如果选择值大于0,则MySql内部联接

如果选择值大于0,则MySql内部联接,mysql,Mysql,我遇到以下问题,我想进行一个查询,该查询将返回我的表计划信息。它看起来类似于此: +---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+ | logs_id | plan_id | workout_i

我遇到以下问题,我想进行一个查询,该查询将返回我的表计划信息。它看起来类似于此:

+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
| logs_id | plan_id | workout_id | plan_day | date_made           | workout_names_id | name         | language | workout_id | plan_names_id | name      | language_id | plan_id |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
|       2 |       1 |          1 |        1 | 2017-04-30 11:40:48 |                2 | Workout GR 1 |        2 |          1 |             2 | Plan 1 GR |           2 |       1 |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
1 row in set (0.00 sec)
我的问题是,当计划id没有值时,我什么也得不到,我如何得到一个查询,即使计划id为0,它也会返回一些数据。 这是我迄今为止所编写的代码:

DELIMITER $$
CREATE PROCEDURE get_logs(IN _language SMALLINT(255))
BEGIN

SELECT * FROM logs AS lo INNER JOIN workout_names AS wn ON lo.workout_id = wn.workout_id INNER JOIN plan_names AS pn ON lo.plan_id = pn.plan_id WHERE wn.language = _language AND pn.language_id = _language ORDER BY lo.logs_id;

END$$
当计划id中没有值时,它不会返回任何内容

更新

以下代码适用于部分问题:

DELIMITER $$
CREATE PROCEDURE get_logs(IN _language SMALLINT(255))
BEGIN

SELECT * FROM logs AS lo INNER JOIN workout_names AS wn ON lo.workout_id = wn.workout_id LEFT JOIN plan_names AS pn ON lo.plan_id = pn.plan_id WHERE wn.language = _language AND pn.language_id = _language ORDER BY lo.logs_id;


END$$
如果pn.language\u id=\u language中的值不为null,我该如何执行此操作。我已经知道pn.language\u id=\u language不为null,但它会返回以下内容:

+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
| logs_id | plan_id | workout_id | plan_day | date_made           | workout_names_id | name         | language | workout_id | plan_names_id | name      | language_id | plan_id |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
|       3 |       1 |          1 |        1 | 2017-04-30 12:20:47 |                1 | Workout EN 1 |        1 |          1 |             1 | Plan 1 EN |           1 |       1 |
|       3 |       1 |          1 |        1 | 2017-04-30 12:20:47 |                1 | Workout EN 1 |        1 |          1 |             2 | Plan 1 GR |           2 |       1 |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+-----------+-------------+---------+
2 rows in set (0.00 sec)
基本上,我只解析一种语言,它得到的是所有语言,它不会返回空的语言。但如果我添加为空,它会返回:

+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+------+-------------+---------+
| logs_id | plan_id | workout_id | plan_day | date_made           | workout_names_id | name         | language | workout_id | plan_names_id | name | language_id | plan_id |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+------+-------------+---------+
|       1 |       0 |          1 |        0 | 2017-04-30 10:52:24 |                1 | Workout EN 1 |        1 |          1 |          NULL | NULL |        NULL |    NULL |
+---------+---------+------------+----------+---------------------+------------------+--------------+----------+------------+---------------+------+-------------+---------+
1 row in set (0.00 sec)
我怎样才能将它们结合起来像一个一样工作呢?

就是这样

DELIMITER $$
    CREATE PROCEDURE get_logs(IN _language SMALLINT(255))
    BEGIN

    SELECT * FROM logs AS lo INNER JOIN workout_names AS wn ON lo.workout_id = wn.workout_id LEFT JOIN plan_names AS pn ON lo.plan_id = pn.plan_id AND pn.language_id = _language WHERE wn.language = _language ORDER BY lo.logs_id;


    END$$

为什么否决投票?因为您的问题不清楚。您的查询返回的计划名称为
name
,您还想要什么?计划名称和计划id是可选的,如果没有值,我希望能够进行查询。嗯,您正在加入计划名称。所以pn.name已经存在了。因此,只需显式地选择所需的字段,而不是*。如果您希望plan_id为空,请使用左联接来连接plan_名称。