MySQL将表连接到自身

MySQL将表连接到自身,mysql,sql,Mysql,Sql,我试图得到一个MySQL报告,但什么也得不到。请指出哪里不对?我检查了这个类似的问题,但找不到解决问题的方法 表值 那个数据模型在我看来很可怕。但是无论如何,如果您想要外部联接一个表,请不要在WHERE子句中对其设置条件。外部联接记录的所有值都设置为null,因此o2.ind=$ind对于这样的记录永远不会为true。最终会得到一个内部联接,从而忽略整个行。将您的联接条件改为放在ON子句中 您还混淆了连接中的ID。o是您的主要选项,例如“衬衫”,o1是其第一选项,即颜色,例如“绿色”,因此它必须

我试图得到一个MySQL报告,但什么也得不到。请指出哪里不对?我检查了这个类似的问题,但找不到解决问题的方法

表值
那个数据模型在我看来很可怕。但是无论如何,如果您想要外部联接一个表,请不要在WHERE子句中对其设置条件。外部联接记录的所有值都设置为null,因此o2.ind=$ind对于这样的记录永远不会为true。最终会得到一个内部联接,从而忽略整个行。将您的联接条件改为放在ON子句中

您还混淆了连接中的ID。o是您的主要选项,例如“衬衫”,o1是其第一选项,即颜色,例如“绿色”,因此它必须是o1.pk=o.opt_类型1,而不是o1.opt_类型1=o.pk


您能用$options显示最终查询,并用实际值替换$ind吗?$options中的内容查看一下如何使用GROUP_CONCAT显示您的预期结果look,我只花了几分钟就键入了它:-实际问题非常抽象,我在这里尝试重现该问题。让我试试你的解决办法。 +----+-----+----------+---------+-----------+-----------+ | pk | ind | opt_type | name | opt_type1 | opt_type2 | +----+-----+----------+---------+-----------+-----------+ | 1 | 1 | group_1 | Green | - | - | | 2 | 1 | group_1 | Red | - | - | | 3 | 1 | group_2 | Cloth | - | - | | 4 | 1 | group_3 | Shirt | 1 | 3 | | 5 | 1 | group_4 | Table | 2 | - | +----+-----+----------+---------+-----------+-----------+ name | colour | material ------+--------+--------- Shirt | Green | Cloth Table | Red |
    SELECT
    o.name         
    , o1.name as colour
    , o2.name as material

    FROM $options as o
    LEFT JOIN $options AS o1 ON o1.opt_type1 = o.pk
    LEFT JOIN $options AS o2 ON o2.opt_type2 = o.pk                    

    WHERE o.ind=$ind
    AND o1.ind=$ind
    AND o2.ind=$ind


    LOOP{
    echo $name ." ". $colour ." ". $material;
    }
SELECT
  o.name         
, o1.name as colour
, o2.name as material
FROM $options as o
LEFT JOIN $options AS o1 ON o1.pk = o.opt_type1 AND o1.ind = o.ind
LEFT JOIN $options AS o2 ON o2.pk = o.opt_type2 AND o2.ind = o.ind 
WHERE o.ind = $ind AND (o.opt_type1 is not null or o.opt_type2 is not null);