2016-06-14 83 views
-1

我的数据库:INNER JOIN返回什么

CREATE TABLE EXPERIENCIA(
    exp_pri INT NOT NULL AUTO_INCREMENT, 
    nome VARCHAR(150), 
    email VARCHAR(50),  
    exp VARCHAR(100), 
    PRIMARY KEY(exp_pri) 
); 

CREATE TABLE PRANCHA(
    prancha_pri INT NOT NULL AUTO_INCREMENT,  
    tamanho_prancha VARCHAR(8), 
    meio_prancha VARCHAR(2), 
    litragem_prancha VARCHAR(3), 
    PRIMARY KEY (prancha_pri) 
); 

CREATE TABLE ALTURAPESOESTILO(
    idAltPes INT NOT NULL AUTO_INCREMENT, 
    idExp INT, 
    idPrancha INT, 
    altura VARCHAR(4), 
    peso VARCHAR(3), 
    estilo VARCHAR(15), 
    primary key (idAltPes), 
    constraint fk_idExp foreign key (idExp) references EXPERIENCIA (exp_pri), 
    constraint fk_idPrancha foreign key (idPrancha) references PRANCHA (prancha_pri) 
); 

我的SQL:

$query = "SELECT EXP.exp, 
      AEP.altura, 
      AEP.peso, 
      AEP.estilo, 
      PRAN.tamanho_prancha, 
      PRAN.meio_prancha, 
      PRAN.litragem_prancha 
    FROM EXPERIENCIA AS EXP 
    INNER JOIN ALTURAPESOESTILO AS AEP 
    ON (EXP.exp_pri = AEP.idAltPes) 
    INNER JOIN PRANCHA AS PRAN 
    ON (PRAN.prancha_pri = AEP.idAltPes)"; 

$resultado = mysqli_query($conexao,$query); 

$retorno = array(); 

while($experiencia = mysqli_fetch_assoc($resultado)){ 
    $retorno[] = $experiencia; 
} 

return $retorno; 

}

的index.php

include 'banco.php'; 

    $resultado = array(); 
    $resultado = BuscaAlgo($conexao); 


    foreach($resultado as $valor) 
    { 
     echo $valor['exp']; print(' '); echo $valor['altura']; print(' '); echo $valor['peso']; 
     echo $valor['estilo']; print(' '); echo $valor['tamanho_prancha']; print(' '); echo $valor['meio_prancha']; 
     print(' '); echo $valor['litragem_prancha']; ?><br> <?php 
    } 

我加入三桌,并试图以显示它们。但是,两者都直接放在MySql中,就像我的代码一样,没有任何东西被返回。它没有错误,但没有显示。

它可能是什么?

+0

请给输入,输出和预期输出,当你运行你的查询。阅读[mcve] s。 PS您只请求EXP.exp_pri = PRAN.prancha_pri = AEP.idAltPes的三个表的交叉乘积的行。那是你要的吗? – philipxy

回答

0

您已要求只有三个表的交叉乘积的行,其中

EXP.exp_pri = PRAN.prancha_pri = AEP.idAltPes 

那是你真正想要的?你还没有告诉我们你的表格是什么意思。但是,您的AEPidAltPes值应该与其他列中的值相等似乎不太可能。如果它们不相等,则不会返回任何行。考虑到你的外键的声明,可能不是你想要的:

AEP.idExp = EXP.exp_pri AND AEP.idPrancha = PRAN.exp_pri 

所以

FROM ALTURAPESOESTILO AEP 
INNER JOIN EXPERIENCIA EXP 
ON (EXP.exp_pri = AEP.idExp) 
INNER JOIN PRANCHA PRAN 
ON (PRAN.prancha_pri = AEP.idPrancha) 
1

INNER JOIN是独占的,并且需要在两个表中匹配非空值。我注意到你已经在前三张表中定义了外键关系。

有没有在INNER JOIN中使用外键约束列的原因?该约束将确保在主表和从属表中匹配非空值。